it-swarm.cn

将文件添加/更新到现有的tar.gz归档文件?

有没有一种方法可以在tar.gz归档文件中添加/更新文件?基本上,我有一个包含/data/data/com.myapp.backup/./files/settings.txt的文件的存档,我想从存档中拉出该文件(已完成),并在完成编辑后将其推回存档中。我该怎么做?是否由于路径中的.而有问题?

78
Naftuli Kay

Tar文件格式只是一系列文件和几个标头串联在一起。将其拆开,放入内容并放回原处并不是一件很复杂的工作。话虽这么说, 描述了Jander tar作为程序如何没有实用程序功能来执行此操作,并且压缩还有其他复杂性,这在更改前后都必须如此。

但是,有工作所需的工具!至少有两个系统,使您可以将压缩的tar归档环回安装到文件夹上,然后在文件系统中进行更改。完成后,请卸载该文件夹,然后即可开始压缩存档。

第一个选择是 Fusearchivemount 项目。这是 有关此内容的教程 。您的系统可能已经装有Fuse,如果没有,则您的发行版应该有一个选项。

另一个选项是 tarfs 。它是 更易于使用 ,但是我听说它在破坏bzip2归档文件方面存在一些麻烦,因此您可以先对其进行彻底的测试。

18
Caleb

要从存档中提取文件,可以使用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

这可能不是您想听到的,因为这意味着两次重写整个存档。如果档案不是很大,最好解压缩整个内容,然后在编辑后重新解压缩。或者,您可以使用未压缩的存档。

48
Jander

Tar原本是要用于磁带的,所以“替换”文件并不是真正的设计。但是,您可以使用--delete从原始tar中删除文件,然后使用-u更新tar并重新添加文件。可能需要一点时间,因为tar需要在内部重新组织档案。

9
rleibman