如何从 tar.gz 存档中删除单个文件
How do I delete a single file from a tar.gz archive
我有一个巨大的 tarbell 存档,其中有一个过大或损坏的 error_log,导致存档在尝试提取它时挂起。有没有办法在解压缩或提取档案之前从档案中删除它而不在 Mac OS X 终端上提取特定文件?
我发现这个 post 关于如何 efficiently-remove-files-from-large-tgz 但是,我尝试了 --delete 标志,但收到此错误:
tar: Option --delete is not supported
有没有办法:
- 在不解压缩的情况下从存档中删除文件?
- 提取存档但排除文件?
如评论中所述,无法使用 tar 删除文件,但您可以在提取时排除文件:
tar -zxvf file.tar.gz --exclude "file_to_exclude"
亲爱的,您可以通过与我们通过
从以下命令中删除目录相同的格式删除存档文件
命令:- rm -rf 归档文件名
r:-递归
你可以这样重新打包:
tar -czvf ./new.tar.gz --exclude='._*' @old.tar.gz
我使用 ._*
删除了所有 ._files
,但您可以使用您喜欢的任何模式,包括完整路径、目录、文件名或其他任何内容。
我是按树步骤做的。希望以后能帮助到别人。
gzip -d file.tar.gz
tar -f file.tar --delete folder1/file1.txt --delete folder2/file2.txt
gzip -9 file.tar
如果您有多个文件,请使用它。但是他们的存档必须有你要删除的所有文件,否则tar会报错
for f in *.tar.gz
do
echo "Processing file $f"
gzip -d "$f"
tar -f "${f%.*}" --delete folder1/file1.txt --delete folder2/file2.txt
gzip -9 "${f%.*}"
done
我想用一个衬垫从 elasticsearch-oss 存档中删除 jdk 目录,这就是我想出的:
gzip -d elasticsearch-oss-7.10.1-linux-x86_64.tar.gz -c | tar --delete --wildcards */jdk | gzip - > /tmp/tmp.$$.tar.gz && mv /tmp/tmp.$$.tar.gz elasticsearch-oss-7.10.1-linux-x86_64.tar.gz
我进一步完善了它以包括下载:
curl -Ss https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-oss-7.10.1-linux-x86_64.tar.gz | gzip -d - -c | tar --delete --wildcards */jdk | gzip - > elasticsearch-oss-7.10.1-linux-x86_64.tar.gz
在 ubuntu 20.04 上工作,所以 gnu tar 不支持 @ 符号。
我有一个巨大的 tarbell 存档,其中有一个过大或损坏的 error_log,导致存档在尝试提取它时挂起。有没有办法在解压缩或提取档案之前从档案中删除它而不在 Mac OS X 终端上提取特定文件?
我发现这个 post 关于如何 efficiently-remove-files-from-large-tgz 但是,我尝试了 --delete 标志,但收到此错误:
tar: Option --delete is not supported
有没有办法:
- 在不解压缩的情况下从存档中删除文件?
- 提取存档但排除文件?
如评论中所述,无法使用 tar 删除文件,但您可以在提取时排除文件:
tar -zxvf file.tar.gz --exclude "file_to_exclude"
亲爱的,您可以通过与我们通过
从以下命令中删除目录相同的格式删除存档文件命令:- rm -rf 归档文件名 r:-递归
你可以这样重新打包:
tar -czvf ./new.tar.gz --exclude='._*' @old.tar.gz
我使用 ._*
删除了所有 ._files
,但您可以使用您喜欢的任何模式,包括完整路径、目录、文件名或其他任何内容。
我是按树步骤做的。希望以后能帮助到别人。
gzip -d file.tar.gz
tar -f file.tar --delete folder1/file1.txt --delete folder2/file2.txt
gzip -9 file.tar
如果您有多个文件,请使用它。但是他们的存档必须有你要删除的所有文件,否则tar会报错
for f in *.tar.gz
do
echo "Processing file $f"
gzip -d "$f"
tar -f "${f%.*}" --delete folder1/file1.txt --delete folder2/file2.txt
gzip -9 "${f%.*}"
done
我想用一个衬垫从 elasticsearch-oss 存档中删除 jdk 目录,这就是我想出的:
gzip -d elasticsearch-oss-7.10.1-linux-x86_64.tar.gz -c | tar --delete --wildcards */jdk | gzip - > /tmp/tmp.$$.tar.gz && mv /tmp/tmp.$$.tar.gz elasticsearch-oss-7.10.1-linux-x86_64.tar.gz
我进一步完善了它以包括下载:
curl -Ss https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-oss-7.10.1-linux-x86_64.tar.gz | gzip -d - -c | tar --delete --wildcards */jdk | gzip - > elasticsearch-oss-7.10.1-linux-x86_64.tar.gz
在 ubuntu 20.04 上工作,所以 gnu tar 不支持 @ 符号。