Respuestas:
Normalmente usarías la bandera -u para esto. Desde la página de manual de tar:
-u, --update only append files newer than copy in archive
así que esta secuencia hará lo que necesitas:
# 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
Para una mirada un poco más detallada, vea aquí: http://www.gnu.org/software/tar/manual/html_node/how-to-update.html
No puede actualizar el archivo TAR comprimido ( .tar.gz ) en un solo paso. Pero, si tiene suficiente espacio libre, puede hacer esto:
Extraiga el archivo .tar del archivo .tar.gz :
gunzip filename.tar.gz
Actualice el archivo .tar sin comprimir con el tar -ucomando:
tar -uf filename.tar new_file
Comprima el archivo .tar actualizado :
gzip filename.tar
Si tiene una CPU multinúcleo, le recomiendo usar en pigzlugar de gzipextraer y crear archivos .gz . ( pigzes una implementación multiproceso de gzip)
Simplemente reemplace gzip/ gunzipcomandos a pigz/ unpigz.
Si desea actualizar un archivo en particular en el *.tar.gzarchivo, simplemente haga lo siguiente:
Ingrese videsde donde tarestá disponible el archivo
/home>vi
Por ejemplo, si desea modificar simple.tar.gz que está en el /home/test/directorio, el:
/home/test>vi
Y en el editor vacío, ingrese :n simple.tar.gzy presione Enter
, obtendrá la lista de carpetas y archivos, mueva el cursor donde desee modificar y haga clic Enter. Se mostrará el vieditor del archivo en particular. Luego iopción para cambiar el archivo. Después del cambio exitoso. Presione la Esctecla y elija :wqescribir y salir del archivo. Luego, use :qpara salir de la lista de archivos.
Si va a hacer esto repetidamente, una optimización puede ser:
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