我有一个很大的backup.tar.gz文件(260 GB)和大约160 GB的可用存储空间。
备份文件包含三个大的哑文件(旧备份,大约190 GB),这是不需要的。
所以我想解压backup.tar.gz来管道排除一些文件并在没有gzip的情况下将其tar回来。
我有一个文本文件,其中包含哑文件的名称。
所以我需要这样的东西:
tar -xz --exclude-from='exclude.lst' -f backup.tar.gz -O - | tar cfv backup.tar -T -
,但似乎无效。
在第一个回答后,我在https://unix.stackexchange.com/questions/80239/efficiently-remove-files-from-large-tgz
找到了解决方案答案 0 :(得分:1)
此问题属于https://superuser.com/或https://unix.stackexchange.com/。
tar x -O
只是连接所有文件的内容。这会丢失文件名和其他元数据,甚至包括文件之间的边界。
使用GNU tar --delete
重写没有原始成员的tar。由于您拥有要排除的所有文件的名称,因此这应该很简单。也许zcat | tar --delete
可以避免让tar
重新压缩输出。
如果这个答案没有引导你朝着正确的方向前进,我明天可以添加更多细节。
我想我记得看到一个瑞士军刀命令行存档程序可能有选择来做这类事情,但快速搜索并没有找到它。