有没有办法在 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
答案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/