问题描述
我创建了一个 tar.gz 文件(使用 GUI,而不是命令行)。如何使用添加新文件和更新修改文件的命令来更新它?
最佳思路
您通常会为此使用 -u 标志。从 tar 的手册页:
\\n
-u, --update\\n only append files newer than copy in archive\\n
\\n
所以这个序列将做你需要的:
# First create the tar file. It has to be UNCOMPRESSED for -u to work
tar -cvf my.tar some-directory/
# ... update some files in some-directory
# ... add files in some-directory
# Now update only the changed and added files
tar -uvf my.tar some-directory/
# Compress if desired
gzip my.tar
如需更详细的外观,请参见此处:http://www.gnu.org/software/tar/manual/html_node/how-to-update.html
次佳思路
解决方案/解决方法
您无法一步更新压缩的 TAR 存档 (.tar.gz)。但是,如果你有足够的可用空间,你可以这样做:
-
从 .tar.gz 文件中提取 .tar 文件:\n
gunzip filename.tar.gz
-
使用
tar -u
命令更新未压缩的 .tar 文件:\ntar -uf filename.tar new_file
-
压缩更新的 .tar 文件:\n
gzip filename.tar
Speedup
如果您有 multi-core CPU,我建议使用 pigz
而不是 gzip
来提取和创建 .gz 文件。 ( pigz
是 gzip
的 multi-threaded 实现)
只需将 gzip
/gunzip
命令替换为 pigz
/unpigz
。
相关手册
第三种思路
如果要更新 *.tar.gz
文件中的特定文件,只需执行以下操作:
从 tar
文件可用的位置输入 vi
/home>vi
例如,如果你想修改 /home/test/
目录下的 simple.tar.gz:
/home/test>vi
在空编辑器中输入 :n simple.tar.gz
并按 Enter
\n您将获得文件夹和文件列表,将光标移动到您要修改的位置\n然后单击 Enter
。它将显示特定文件的 vi
编辑器。然后用 i
选项更改文件。更改成功后。按 Esc
键并选择 :wq
写入并退出文件。然后使用 :q
从文件列表中出来。