GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo comparar el contenido de dos tarball

Intente también pkgdiff para visualizar las diferencias entre paquetes (detecta archivos agregados/eliminados/renombrados y contenido modificado, existe sin código si no se modifica):

pkgdiff PKG-0.tgz PKG-1.tgz


¿Estás controlando la creación de estos archivos tar?
Si es así, el mejor truco sería crear una suma de comprobación MD5 y almacenarla en un archivo dentro del propio archivo. Luego, cuando desee comparar dos archivos, simplemente extraiga estos archivos de suma de verificación y compárelos.

Si puede permitirse el lujo de extraer solo un archivo tar , puedes usar el --diff opción de tar para buscar diferencias con el contenido de otro archivo tar.

Un truco más crudo si está de acuerdo con solo una comparación de los nombres de archivo y sus tamaños .
Recuerde, ¡esto no garantiza que los otros archivos sean iguales!

ejecutar un tar tvf para enumerar el contenido de cada archivo y almacenar los resultados en dos archivos diferentes. luego, corte todo, además de las columnas de nombre de archivo y tamaño. Preferiblemente ordene los dos archivos también. Luego, simplemente haga una diferencia de archivo entre las dos listas.

Solo recuerda que este último esquema en realidad no hace una suma de verificación.

Tar de muestra y salida (todos los archivos tienen tamaño cero en este ejemplo).

$ tar tvfj pack1.tar.bz2
drwxr-xr-x user/group 0 2009-06-23 10:29:51 dir1/
-rw-r--r-- user/group 0 2009-06-23 10:29:50 dir1/file1
-rw-r--r-- user/group 0 2009-06-23 10:29:51 dir1/file2
drwxr-xr-x user/group 0 2009-06-23 10:29:59 dir2/
-rw-r--r-- user/group 0 2009-06-23 10:29:57 dir2/file1
-rw-r--r-- user/group 0 2009-06-23 10:29:59 dir2/file3
drwxr-xr-x user/group 0 2009-06-23 10:29:45 dir3/

Comando para generar una lista ordenada de nombres/tamaños

$ tar tvfj pack1.tar.bz2 | awk '{printf "%10s %s\n",$3,$6}' | sort -k 2
0 dir1/
0 dir1/file1
0 dir1/file2
0 dir2/
0 dir2/file1
0 dir2/file3
0 dir3/

Puede tomar dos listas ordenadas de este tipo y diferenciarlas.
También puede usar las columnas de fecha y hora si eso funciona para usted.


EDITAR:Ver el comentario de @StéphaneGourichon

Me doy cuenta de que esta es una respuesta tardía, pero encontré el hilo mientras intentaba lograr lo mismo. La solución que implementé genera el tar en la salida estándar y lo canaliza al hash que elija:

tar -xOzf archive.tar.gz | sort | sha1sum

Tenga en cuenta que el orden de los argumentos es importante; particularmente O qué señales usar stdout.


Linux
  1. Cómo extraer archivos .gz y .tar.gz en Linux

  2. Cómo buscar archivos para contenido

  3. Cómo comparar dos bases de datos SQLite en Linux

  4. ¿Cómo fusionar dos archivos usando AWK?

  5. cómo fusionar dos archivos consistentemente línea por línea

Cómo comparar y fusionar archivos de texto en Linux

Cómo comparar y fusionar archivos de texto en Linux (parte 2)

Comando tar de Linux:cómo comprimir archivos en Linux

Cómo mostrar dos archivos uno al lado del otro en Linux

Cómo comparar dos archivos en la terminal de Linux

¿Cómo comparo archivos binarios en Linux?