我有一个巨大的tarbell存档,其中的error_log过大或损坏,导致存档在尝试提取时挂起。有没有办法在解压缩之前将其从存档中删除,或者在不提取Mac OS X终端上的特定文件的情况下提取存档?
我找到了这篇关于如何有效地从大tgz中删除文件的文章,但是,我尝试了--delete标志,但收到此错误:
tar: Option --delete is not supported
有没有办法:
- 从存档中删除文件而不解压缩它?
- 提取存档但排除文件?
如注释中所述,无法使用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:- 递归