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

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

有没有办法在 tar.gz 存档中添加/更新文件?基本上,我有一个存档,其中包含一个文件/data/data/com.myapp.backup/./files/settings.txt,我想从存档中提取该文件(已经完成),并在编辑完成后将其推回到存档中。我怎样才能做到这一点?是因为.路径中的问题吗?

答案1

要从存档中提取文件,您可以使用tar xzf archive.tar.gz my/path/to/file.txt.请注意,文件路径中的目录也会被创建。使用tar t(ie 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

这可能不是您想听到的,因为这意味着将整个存档重写两次。如果它不是一个非常大的存档,最好解压整个文件,然后在编辑后重新打包它。或者,您可以使用未压缩的存档。

答案2

tar 文件格式只是一系列与一些标头连接在一起的文件。将其拆开、放入内容物并重新组装起来并不是一项非常复杂的工作。话虽如此,詹德描述tar 作为一个程序如何没有执行此操作的实用函数,并且压缩还有其他复杂性,必须在进行更改之前和之后进行。

然而,有一些工具可以完成这项工作!至少有两个系统允许您将压缩的 tar 存档环回安装到文件夹上,然后在文件系统中进行更改。完成后,卸载文件夹,您的压缩存档就可以开始使用了。

第一个选项是存档挂载项目为保险丝。这是有关于此的教程。您的系统可能已经有 FUSE,如果没有,您的发行版应该有一个选项。

另一种选择是塔夫斯。它是使用更简单,但我听说它在损坏 bzip2 档案方面遇到了一些麻烦,因此您可以先进行彻底的测试。

答案3

Tar 最初是用于磁带的,因此“替换”文件实际上并不在设计中。但是,您可以--delete从原始 tar 中删除该文件,然后-u更新 tar 并重新添加该文件。这可能需要一些时间,因为tar需要在内部重新组织存档。

答案4

你要找的是 zip。这就是 zip 比 tar 更出色的地方。当您压缩包含各种文件的大型目录结构时,即对 Web 服务器进行运行备份时,gzip 或 bzip2 的压缩效果实际上仅稍好一些。

在典型的 WP 安装上进行测试,tar.gz 仅在 zip 上节省了约 4MB,相当于约 660MB 的存档文件 (663MB/zip) (559MB/gzip),bzip2 又节省了 4MB (555MB),但速度慢得多,而且仍然缺乏通过简单地对现有存档运行相同命令来进行增量备份的能力。

zip --symlinks -r -FS /path_to_backup_dir/backup_file.zip /path_to_webroot/ -x /exclusions_as_pattern/

相关内容