GNU/Linux >> Znalost Linux >  >> Linux

Jak porovnat obsah dvou tarballů

Zkuste také pkgdiff pro vizualizaci rozdílů mezi balíčky (detekuje přidané/odebrané/přejmenované soubory a změněný obsah, existují s nulovým kódem, pokud se nezmění):

pkgdiff PKG-0.tgz PKG-1.tgz


Řídíte vytváření těchto souborů tar?
Pokud ano, nejlepším trikem by bylo vytvořit kontrolní součet MD5 a uložit jej do souboru v samotném archivu. Potom, když chcete porovnat dva soubory, stačí extrahovat tyto soubory kontrolního součtu a porovnat je.

Pokud si můžete dovolit rozbalit pouze jeden soubor tar , můžete použít --diff možnost tar hledat rozdíly s obsahem jiného souboru tar.

Ještě jeden hrubý trik pokud vám stačí porovnání názvů souborů a jejich velikostí .
Pamatujte, že to nezaručuje, že ostatní soubory jsou stejné!

spustit tar tvf vypsat obsah každého souboru a uložit výstupy do dvou různých souborů. pak odřízněte vše kromě sloupců názvu souboru a velikosti. Přednostně také seřaďte dva soubory. Poté jednoduše proveďte rozdíl mezi dvěma seznamy.

Pamatujte, že toto poslední schéma ve skutečnosti neprovádí kontrolní součet.

Ukázkový tar a výstup (v tomto příkladu mají všechny soubory nulovou velikost).

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

Příkaz pro generování seřazeného seznamu jmen/velikostí

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

Můžete vzít dva takto seřazené seznamy a porovnat je.
Můžete také použít sloupce data a času, pokud vám to vyhovuje.


EDIT:Viz komentář od @StéphaneGourichon

Uvědomuji si, že je to opožděná odpověď, ale narazil jsem na vlákno, když jsem se pokoušel dosáhnout stejné věci. Řešení, které jsem implementoval, odešle tar do stdout a převede ho na libovolný hash, který si vyberete:

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

Všimněte si, že pořadí argumentů je důležité; zejména O které signály použít stdout.


Linux
  1. Jak spojit dva textové soubory v Linuxu

  2. Jak porovnat dvě databáze SQLite na Linuxu

  3. Jak nejlépe porovnat obrovské adresářové stromy

  1. Jak mohu porovnat dva soubory XML?

  2. Jak porovnám binární soubory v Linuxu?

  3. Jak tarovat soubory se seřazeným pořadím?

  1. Jak extrahovat soubory Tar do konkrétního nebo jiného adresáře v Linuxu

  2. Jak zobrazit obsah komprimovaných souborů v Linuxu

  3. Jak extrahovat soubory .gz a .tar.gz v Linuxu