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.