How can I update a tar.gz file?

You'd normally use the -u flag for this. From tar's man page:

 -u, --update
       only append files newer than copy in archive

so this sequence will do what you need:

# 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

For a slightly more detailed look, see here: http://www.gnu.org/software/tar/manual/html_node/how-to-update.html


Solution / Workaround

You can not update compressed TAR archive (.tar.gz) in one step. But, if you have enough free space you can do this:

  1. Extract .tar file from .tar.gz file:

    gunzip filename.tar.gz

  2. Update uncompressed .tar file with tar -u command:

    tar -uf filename.tar new_file

  3. Compress the updated .tar file:

    gzip filename.tar

Speedup

If you have multi-core CPU, I recommend to use pigz instead of gzip for extract and create .gz files. (pigz is a multi-threaded implementation of gzip)

Simply replace gzip/gunzip commands to pigz/unpigz.

Related manuals

  • tar - The GNU version of the tar archiving utility
  • pigz - compress or expand files

If you want to update a particular file in *.tar.gz file, just do the following:

Enter vi from where the tar file is available

/home>vi

For eg., if you want to modify simple.tar.gz which is under /home/test/ directory the:

/home/test>vi

And in the empty editor enter :n simple.tar.gz and press Enter you will get the list of folders and files move the cursor where u want to modify And click Enter. It will shown the vi editor of the particular file. Then i option to change the file. After the successful change. Press Esc key and choose :wq to write and quit the file. Then use :q to come out of the file list.

Tags:

Tar