Esiste un modo per eseguire l'operazione di contrasto su due file in due cerniere senza estrarli? In caso contrario - qualsiasi altra soluzione alternativa per confrontarli senza estrarre?file diff all'interno di zip senza estrarlo
Grazie.
Esiste un modo per eseguire l'operazione di contrasto su due file in due cerniere senza estrarli? In caso contrario - qualsiasi altra soluzione alternativa per confrontarli senza estrarre?file diff all'interno di zip senza estrarlo
Grazie.
unzip -l
elencherà il contenuto di un file zip. È quindi possibile passare che a diff
in modo normale, come indicato qui: https://askubuntu.com/questions/229447/how-do-i-diff-the-output-of-two-commands
Così, per esempio se si ha due file zip:
foo.zip
bar.zip
si potrebbe correre diff -y <(unzip -l foo.zip) <(unzip -l bar.zip)
di fare un side-by-side diff del contenuto dei due file.
Spero che questo aiuti!
Aggiungendo il flag '--suppress-common-line' per visualizzare solo le righe che differivano per me: ' diff -y <(unzip -l foo.zip) <(unzip -l bar.zip) --suppress-common-lines' – KostasX
Ho finito con 'function zipdiff() {diff -y <(unzip -l $ 1) <(unzip -l $ 2) --suppress-common-lines; } ', e questo ha funzionato perfettamente per quello che stavo cercando di fare. –
Se vuoi i file diff
due (come in vedere la differenza) devi estrarli - anche se solo per memoria!
Per vedere il diff di due file in due cerniere si può fare qualcosa di simile (nessun controllo di errore o di sorta):
# 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: i file unzip -p
estratti a p ipe (stdout) .
Se solo si vuole sapere se i file sono diversi è possibile ispezionare i loro checksum utilizzando
unzip -v -l zipfile [file_to_inspect]
Nota: -v
verbose e -l
lista contenuti)
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 file
Nell'esempio sopra di voi può vedere che i checksum (CRC-32) sono diversi.
Potreste anche essere interessati a questo progetto: https://github.com/nhnb/zipdiff
Se è necessario solo per verificare se i file sono uguali è possibile confrontare CRC32 checksum, che sono memorizzati in archivio campi di intestazione locali/directory centrale.
Combinando le risposte finora, la seguente funzione di bash confronterà gli elenchi di file dai file zip. Gli elenchi includono l'output dettagliato (unzip -v
), quindi i checksum possono essere confrontati. L'output è ordinato per nome file (sort -k8
) per consentire il confronto affiancato e l'output diff espanso (W200
) in modo che i nomi dei file siano visibili nella vista affiancata.
function zipdiff() { diff -W200 -y <(unzip -vql $1 | sort -k8) <(unzip -vql $2 | sort -k8); }
Questo può essere aggiunto al file ~/.bashrc
per essere utilizzato da qualsiasi console. Può essere utilizzato con zipdiff a.zip b.zip
. Piping dell'output su less o reindirizzamento a un file è utile per file zip di grandi dimensioni.
Vuoi solo sapere se i due file differiscono o vuoi ottenere una differenza visiva? – gollum