¿Cómo puedo actualizar un archivo tar.gz?

32

He creado un archivo tar.gz (usando la GUI, no la línea de comando). ¿Cómo puedo actualizarlo con un comando para agregar nuevos archivos y actualizar también los archivos modificados?

xpanta
fuente
1
Ver también unix.stackexchange.com/questions/13093/…
anatoly techtonik

Respuestas:

28

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

roadmr
fuente
2
OP preguntaba sobre la actualización del archivo comprimido que no se puede actualizar.
QkiZ
18

Solución / Solución

No puede actualizar el archivo TAR comprimido ( .tar.gz ) en un solo paso. Pero, si tiene suficiente espacio libre, puede hacer esto:

  1. Extraiga el archivo .tar del archivo .tar.gz :

    gunzip filename.tar.gz

  2. Actualice el archivo .tar sin comprimir con el tar -ucomando:

    tar -uf filename.tar new_file

  3. Comprima el archivo .tar actualizado :

    gzip filename.tar

Acelerar

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.

Manuales relacionados

andras.tim
fuente
5

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.

priyanka
fuente
1

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
Shubham Chaudhary
fuente