¿Hay alguna forma de realizar una operación de diferenciación en dos archivos en dos zips sin extraerlos? Si no, ¿alguna otra solución para compararlos sin extraerlos?
Gracias.
Combinando las respuestas hasta el momento, la siguiente función bash comparará las listas de archivos de los archivos zip. Los listados incluyen una salida detallada ( unzip -v ), por lo que se pueden comparar las sumas de verificación. La salida se ordena por nombre de archivo ( sort -k8 ) para permitir la comparación lado a lado y la salida diff se expande ( W200 ) para que los nombres de archivo sean visibles en la vista lado a lado.
function zipdiff() { diff -W200 -y <(unzip -vql "$1" | sort -k8) <(unzip -vql "$2" | sort -k8); } Esto se puede agregar a su archivo ~/.bashrc para usarlo desde cualquier consola. Se puede usar con zipdiff a.zip b.zip . Canalizar la salida a menos o redirigir a un archivo es útil para archivos zip grandes.
unzip -l enumerará el contenido de un archivo zip. Luego puede pasar eso a diff de la manera normal como se menciona aquí: https://askubuntu.com/questions/229447/how-do-i-diff-the-output-of-two-commands
Entonces, por ejemplo, si tuviera dos archivos zip:
foo.zip bar.zip Puede ejecutar diff -y <(unzip -l foo.zip) <(unzip -l bar.zip) para hacer una diferenciación lado a lado del contenido de los dos archivos.
¡Espero que ayude!
Si desea diff dos archivos (como en ver la diferencia ), debe extraerlos, ¡aunque solo sea en la memoria!
Para ver la diferencia de dos archivos en dos zips, puede hacer algo como esto (sin verificación de errores ni nada):
# define a little bash function function zipdiff () { diff -u <(unzip -p $1 $2) <(unzip -p $3 $4); } # test it: create a.zip and b.zip, each with a different file.txt echo hello >file.txt; zip a.zip file.txt echo world >file.txt; zip b.zip file.txt zipdiff a.zip file.txt b.zip file.txt --- /dev/fd/63 2016-02-23 18:18:09.000000000 +0100 +++ /dev/fd/62 2016-02-23 18:18:09.000000000 +0100 @@ -1 +1 @@ -hello +world Nota: unzip -p extrae archivos a pipe (stdout).
Si solo desea saber si los archivos son diferentes, puede inspeccionar sus sumas de verificación usando
unzip -v -l zipfile [file_to_inspect] Nota: -v significa detallado y -l lista de contenidos)
unzip -v -l a.zip Archive: a.zip Length Method Size Cmpr Date Time CRC-32 Name -------- ------ ------- ---- ---------- ----- -------- ---- 6 Stored 6 0% 2016-02-23 18:23 363a3020 file.txt -------- ------- --- ------- 6 6 0% 1 file unzip -v -l b.zip Archive: b.zip Length Method Size Cmpr Date Time CRC-32 Name -------- ------ ------- ---- ---------- ----- -------- ---- 6 Stored 6 0% 2016-02-23 18:23 dd3861a8 file.txt -------- ------- --- ------- 6 6 0% 1 fileEn el ejemplo anterior, puede ver que las sumas de verificación (CRC-32) son diferentes.
También te puede interesar este proyecto: https://github.com/nhnb/zipdiff