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



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

找到了这篇关于如何有效地从大tgz中删除文件的文章,但是,我尝试了--delete标志,但收到此错误:

tar: Option --delete is not supported

有没有办法:

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

如注释中所述,无法使用tar删除文件,但是您可以在提取时排除该文件:

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

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

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

亲爱的,

您可以通过与以下命令中删除目录相同的格式删除存档文件

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

最新更新