Answers:
tar文件格式只是一系列文件和几个标头串联在一起。将其拆开,放入内容并放回原处并不是一件很复杂的工作。话虽如此,Jander描述了tar作为程序是如何不具有实用程序功能来执行此操作的,并且压缩还有其他复杂性,压缩前后必须同时进行更改。
但是,有工作所需的工具!至少有两个系统,使您可以将压缩的tar归档环回安装到文件夹上,然后在文件系统中进行更改。完成后,请卸载该文件夹,然后即可开始压缩存档。
第一个选择是FUSE的archivemount项目。这是有关此的教程。您的系统可能已经具有FUSE,如果没有,则您的发行版应该有一个选项。
另一个选择是tarfs。它使用起来更简单,但是我听说它在破坏bzip2归档文件方面存在一些麻烦,因此您可以先对其进行彻底的测试。
要从存档中提取文件,可以使用tar xzf archive.tar.gz my/path/to/file.txt
。请注意,文件路径中的目录也会被创建。使用tar t
(即tar tzf archive.tar.gz
)列出存档中的文件。
tar
不支持“就地”更新文件。但是,即使文件的路径与归档中已存在的文件的路径相同,也可以将其添加到归档的末尾。在这种情况下,文件的两个副本都将在存档中,而以后添加的文件将覆盖较早的文件。为此使用的命令是tar r
(或tar u
仅添加比归档文件新的文件)是要使用的命令。该.
路径不应该是一个问题。
但是有一个陷阱:您不能添加到压缩的存档中。因此,您必须执行以下操作:
gunzip archive.tar.gz
tar rf archive.tar data/data/com.myapp.backup/./files/settings.txt
gzip archive.tar
这可能不是您想听到的,因为这意味着两次重写整个存档。如果存档不是很大,最好解压缩整个内容,然后在编辑后重新解压缩。或者,您可以使用未压缩的存档。
tar
程序的情况下才是正确的。Tar作为文件格式实际上很容易访问。您可以轻松地编写脚本来自己更新内容,但是已经有其他工具可以执行此操作。
gzip -dc archive.tar.gz | tar -r data/data/com.myapp.backup/./files/settings.txt | gzip >archive_new.tar.gz
Tar最初是用于磁带的,因此在设计中并没有真正“替换”文件。但是,可以使用--delete从原始tar中删除文件,然后使用-u更新tar并重新添加文件。可能需要一点时间,因为tar需要在内部重新组织档案。
在我的Linux x86_64 GNU / Linux上执行该操作,我仅使用以下命令:
tar cvfpz /path/archive.tar -T list.txt
该命令导致/path
使用文件中包含的list.txt
文件列表创建压缩档案。
/path/archive.tar
,而不是添加/更新该文件。
.DS_Store
的目录,然后重新压缩该目录。