Velvet Star Monitor

Standout celebrity highlights with iconic style.

news

How can I update a tar.gz file?

Writer Sebastian Wright

I have created a tar.gz file (using the GUI, not the command line). How can I update it with a command that new files are added and modified files are updated, too?

1

4 Answers

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:

1

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

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 Enteryou 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.

2

If you are going to do this repeatedly, an optimization can be:

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

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy