我有一个巨大的tarbell存档,其中包含过大或损坏的error_log,导致存档在尝试提取时挂起.在解压缩或解压缩归档而不在Mac OS X终端上提取该特定文件之前,有没有办法从归档中删除它?
我发现这篇文章关于如何有效地从大文件中删除文件但是,我尝试了--delete标志,但是收到了这个错误:
tar: Option --delete is not supported
Run Code Online (Sandbox Code Playgroud)
有办法:
msf*_*ter 16
如评论中所述,使用tar删除文件是不可能的,但您可以在解压缩时排除文件:
tar -zxvf file.tar.gz --exclude "file_to_exclude"
Run Code Online (Sandbox Code Playgroud)
voi*_*ces 10
您可以像这样重新打包它:
tar -czvf ./new.tar.gz --exclude='._*' @old.tar.gz
Run Code Online (Sandbox Code Playgroud)
我曾经._*删除 all ._files,但您可以使用任何您喜欢的模式,包括完整路径、目录、文件名或其他任何内容。
我用树步骤做到了这一点。希望将来能帮助其他人。
gzip -d file.tar.gz
tar -f file.tar --delete folder1/file1.txt --delete folder2/file2.txt
gzip -9 file.tar
Run Code Online (Sandbox Code Playgroud)
如果您有多个文件,请使用此选项。但存档中必须包含要删除的所有文件,否则 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
Run Code Online (Sandbox Code Playgroud)