我有一个很大的 backup.tar.gz 文件 (260 GB) 和大约 160 GB 的可用存储空间。
备份文件包含三个大的哑文件(旧备份,约190 GB),这是不需要的。
所以我想解压 backup.tar.gz 以通过管道排除一些文件,然后在不使用 gzip 的情况下将其压缩回来。
我有一个文本文件,其中包含哑文件的名称。
所以我需要类似的东西:
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
最佳答案
这个问题属于https://superuser.com/或https://unix.stackexchange.com/ .
tar x -O
只是连接所有文件的内容。这会丢失文件名和其他元数据,甚至包括文件之间的边界所在的位置。
使用 GNU tar --delete
重写一个没有一些原始成员的 tar。由于您拥有要排除的所有文件的名称,因此这应该很简单。也许zcat | tar --delete
以避免 tar
重新压缩输出。
如果这个答案不能引导您走向正确的方向,我可以明天添加更多详细信息。
我想我记得看到过一个存档 swiss-army-knife 命令行程序,它可能有执行此类操作的选项,但快速搜索没有找到它。
关于linux - 将 tar.gz 重新打包为 tar 并排除一些文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31716185/