linux - 将 tar.gz 重新打包为 tar 并排除一些文件

标签 linux bash tar

我有一个很大的 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/

相关文章:

compression - 用一个命令创建 tar.xz

linux - Gnome 桌面环境中的服务菜单

linux - CMake:是否可以从命令行获取目标安装目录?

java - UnknownHostException 访问 virtualBox 上的服务

bash - 使用文件系统功能进行Bash编程

linux - 为什么在 `tar cf` 之前通过 `gzip` 运行我的文件会更改其内容?

linux - curl 特定 header 的 "write out"值

linux - 在 bash 中循环遍历文件中的行,而不使用标准输入

linux - 在 Linux bash 中, sleep 一定的数字会永远持续下去

linux - 创建一个平面 tar 文件,将每个文件名保存在以 "a"开头的目录中