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.