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 -u
comando:
tar -uf filename.tar new_file
Comprima el archivo .tar actualizado :
gzip filename.tar
Si tiene una CPU multinúcleo, le recomiendo usar en pigz
lugar de gzip
extraer y crear archivos .gz . ( pigz
es una implementación multiproceso de gzip
)
Simplemente reemplace gzip
/ gunzip
comandos a pigz
/ unpigz
.
Si desea actualizar un archivo en particular en el *.tar.gz
archivo, simplemente haga lo siguiente:
Ingrese vi
desde donde tar
está 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.gz
y presione Enter
, obtendrá la lista de carpetas y archivos, mueva el cursor donde desee modificar y haga clic Enter. Se mostrará el vi
editor del archivo en particular. Luego i
opción para cambiar el archivo. Después del cambio exitoso. Presione la Esctecla y elija :wq
escribir y salir del archivo. Luego, use :q
para 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