我已经创建了一个 tar.gz 文件(使用 GUI,而不是命令行)。如何使用命令更新它,以便添加新文件并更新修改的文件?
答案1
您通常会为此使用 -u 标志。摘自 tar 的手册页:
-u, --update only append files newer than copy in archive
所以这个序列将完成你需要的:
# 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
答案2
解决方案/解决方法
您无法更新压缩的 TAR 存档(压缩文件)一步完成。但是,如果您有足够的可用空间,您可以这样做:
提炼。柏油文件来自压缩文件文件:
gunzip filename.tar.gz
未压缩的更新。柏油使用
tar -u
命令文件:tar -uf filename.tar new_file
压缩更新。柏油文件:
gzip filename.tar
加速
如果你有多核 CPU,我建议使用pigz
而不是gzip
提取和创建.gz文件。(pigz
是的多线程实现gzip
)
只需将gzip
/gunzip
命令替换为pigz
/即可unpigz
。
相关手册
答案3
如果您想更新*.tar.gz
文件中的特定文件,只需执行以下操作:
输入文件所在的vi
位置tar
/home>vi
例如,如果你想修改简单.tar.gz位于以下/home/test/
目录下:
/home/test>vi
在空编辑器中输入:n simple.tar.gz
并按下 ,Enter
您将获得文件夹和文件列表,将光标移动到要修改的位置,然后单击Enter。它将显示vi
特定文件的编辑器。然后i
选择更改文件。成功更改后。按下Esc键并选择:wq
写入并退出文件。然后使用:q
退出文件列表。
答案4
如果要重复执行此操作,可以进行以下优化:
if [[ -f my.tar.gz ]]; then
if [[ ! -f my.tar ]]; then
echo 'No tar, unzipping tar.gz'
gunzip my.tar.gz
fi
tar -uvf my.tar file1 file2 file_new
gzip -fk my.tar # This keeps a copy of the tar.
# -f --force overwrite existing .tar.gz
# -k --keep Keep the input file (.tar file)
else
tar -cvzf my.tar.gz file1 file2
fi