我有一个foo.tar.xz包含很多(比如 200000)个文件的大文件。我发现这个档案包含一些我不想要的(大约 5000 个)文件。我没有足够的磁盘空间将整个内容解压缩到我的磁盘上;此外,如果我这样做,我担心属性/权利可能会丢失。不过,我有足够的空间来托管压缩存档的两个副本。是否有工具可以即时从存档中删除某些文件(在文件名中使用正则表达式指定),即无需将存档解压缩到单个文件中?
Evi*_*ine 22
GNU tar 现在也有一个--delete可以处理档案的选项。
像这样使用它,例如:
tar -vf yourArchive.tar --delete your/path/to/delete
Run Code Online (Sandbox Code Playgroud)
当心:它很可能不适用于任何类型的磁带介质。但是tar在管道中工作没有问题,所以你可以只使用一个临时的 tar 文件,然后用它覆盖磁带。它也不适用于压缩文件,因此您需要解压缩文件。
此外,由于 tar 档案的(按设计)打包线性特性,在任何情况下操作都会相当慢。
fro*_*utz 14
(编辑,因为我误解了这个问题,后来也被编辑了)
您能做的最好的事情是提取、删除和重新压缩整个文件。
unxz < foobar-old.tar.xz | tar --delete foo/bar | xz > foobar-new.tar.xz
无法直接从 tar 中删除文件。
tar 是一个流,最初用于不能很好地进行随机搜索的磁带驱动器 - 虽然理论上它可以在磁盘文件系统上打一个洞/重写剩余的文件,压缩这一点是没有意义的,如果不是全部的话压缩方法严重依赖于文件中较早出现的内容。为了就地执行此操作,您需要非常详细地了解压缩方法和 tar 文件格式。这复杂到没有人会打扰它的地步。保留文件并忽略它们更便宜。
如果您需要此功能,tar 可能不是您想要的。