GNU/Linux >> Linux Esercitazione >  >> Linux

Come confrontare il contenuto di due tarball

Prova anche pkgdiff per visualizzare le differenze tra i pacchetti (rileva i file aggiunti/rimossi/rinominati e il contenuto modificato, esiste con zero codice se invariato):

pkgdiff PKG-0.tgz PKG-1.tgz


Stai controllando la creazione di questi file tar?
In tal caso, il trucco migliore sarebbe creare un checksum MD5 e memorizzarlo in un file all'interno dell'archivio stesso. Quindi, quando vuoi confrontare due file, estrai semplicemente questi file di checksum e confrontali.

Se puoi permetterti di estrarre un solo file tar , puoi usare --diff opzione di tar per cercare differenze con il contenuto di altri file tar.

Un altro trucco rozzo se ti va bene solo un confronto tra i nomi dei file e le loro dimensioni .
Ricorda, questo non garantisce che gli altri file siano gli stessi!

eseguire un tar tvf per elencare il contenuto di ciascun file e memorizzare gli output in due file diversi. quindi, taglia tutto tranne il nome del file e le colonne delle dimensioni. Preferibilmente ordina anche i due file. Poi, basta fare un file diff tra le due liste.

Ricorda solo che quest'ultimo schema non esegue realmente il checksum.

Tar e output di esempio (tutti i file hanno dimensione zero in questo esempio).

$ 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 per generare un elenco ordinato di nomi/dimensioni

$ 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/

Puoi prendere due di questi elenchi ordinati e differenziarli.
Puoi anche utilizzare le colonne di data e ora se per te funziona.


EDIT:vedi il commento di @StéphaneGourichon

Mi rendo conto che questa è una risposta tardiva, ma mi sono imbattuto nel thread mentre cercavo di ottenere la stessa cosa. La soluzione che ho implementato restituisce il tar a stdout e lo reindirizza a qualsiasi hash tu scelga:

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

Si noti che l'ordine degli argomenti è importante; in particolare O quali segnali utilizzare stdout.


Linux
  1. Come unire due file di testo in Linux

  2. Come cercare i file per contenuto

  3. Come confrontare due database SQLite su Linux

  4. Come unire due file usando AWK?

  5. Come unire due file CSV?

Come confrontare e unire file di testo su Linux

Come confrontare e unire file di testo su Linux (parte 2)

Comando tar di Linux – Come comprimere file in Linux

Come visualizzare due file affiancati in Linux

Come confrontare due file nel terminale Linux

come unire due file in modo coerente riga per riga