如何从tar.gz存档中删除单个文件

时间:2015-06-21 08:12:11

标签: tar gz

我有一个巨大的tarbell存档,其中包含过大或损坏的error_log,导致存档在尝试提取时挂起。有没有办法在解压缩或解压缩存档之前从存档中删除它而不在Mac OS X终端上解压缩该特定文件?

我发现这篇帖子关于如何efficiently-remove-files-from-large-tgz但是,我尝试了--delete标志,但收到了这个错误:

tar: Option --delete is not supported

有办法:

  1. 从存档中删除文件而不解压缩它?
  2. 解压缩档案但排除文件?

5 个答案:

答案 0 :(得分:16)

如评论中所述,使用tar删除文件是不可能的,但您可以在解压缩时排除文件:

tar -zxvf file.tar.gz --exclude "file_to_exclude"

答案 1 :(得分:1)

我在树状步骤中做到了。希望将来能对其他人有所帮助。

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

答案 2 :(得分:0)

您可以像这样重新包装它:

tar -czvf ./new.tar.gz --exclude='._*' @old.tar.gz

我使用._*删除了所有._files,但是您可以使用任何喜欢的模式,包括完整路径,目录,文件名或其他任何内容。

答案 3 :(得分:0)

我想从 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 不支持 @ 符号。

答案 4 :(得分:-2)

亲爱的您可以使用与我们通过

从下面的命令中删除目录相同的格式删除存档文件

命令:-rm -rf归档文件名 r:-递归

相关问题