我如何更新 tar.gz 文件?

我如何更新 tar.gz 文件?

我已经创建了一个 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 存档(压缩文件)一步完成。但是,如果您有足够的可用空间,您可以这样做:

  1. 提炼。柏油文件来自压缩文件文件:

    gunzip filename.tar.gz

  2. 未压缩的更新。柏油使用tar -u命令文件:

    tar -uf filename.tar new_file

  3. 压缩更新。柏油文件:

    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

相关内容