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:
Extract .tar file from .tar.gz file:
gunzip filename.tar.gz
Update uncompressed .tar file with
tar -u
command:tar -uf filename.tar new_file
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.