Answers:
--delete
如今,GNU tar也具有与存档一起使用的选项。
像这样使用它,例如:
tar -vf yourArchive.tar --delete your/path/to/delete
请注意:这将很可能不会在任何类型的磁带介质的工作。但是tar
在管道中工作没有任何问题,因此您可以只使用一个临时tar文件,然后用该文件覆盖磁带。它也不适用于压缩文件,因此您需要解压缩文件。
而且,由于tar档案的(按设计)打包线性特性,在任何情况下操作都将相当慢。
gtar --delete
。
-T
与配合使用--delete
,并--wildcards
允许您使用模式而不是文件名,因此请创建一个包含模式的临时文件并使用unxz < file.tar.xz | tar --wildcards --delete -T patternfile | xz > file2.tar.xz
。它不会执行完整的正则表达式(如果需要的话,只需使用tar -t
并建立要删除的文件名列表),而不会执行文件名匹配模式。
(编辑,因为我误解了这个问题,自此以后也对其进行了编辑)
最好的办法是提取,删除和重新压缩整个文件。
unxz < foobar-old.tar.xz | tar --delete foo/bar | xz > foobar-new.tar.xz
无法直接从tar删除文件。
tar是一种流,最初是为不能随机查找的磁带驱动器而设计的-从理论上讲,它可以在磁盘文件系统上打一个洞/重写剩余的文件,而在压缩的情况下,该点几乎没有问题压缩方法在很大程度上取决于文件中较早出现的内容。为了做到这一点,您将需要有关压缩方法以及tar文件格式的非常详细的知识。如此复杂,以至于没有人会去理会它。只保留文件并忽略它们会更便宜。
如果需要此功能,tar可能不是您想要的。
--wildcards
帮助...虽然我必须./
在模式开始时加入...
根据手册,您可以传递文件名列表tar
以仅提取这些文件名。例如:
$ tar --file archive.tar --list
foo
bar
baz
$ tar --file archive.tar --extract foo