GNU/Linux >> Tutoriels Linux >  >> Linux

Comment comparer le contenu de deux archives tar

Essayez également pkgdiff pour visualiser les différences entre les packages (détecte les fichiers ajoutés/supprimés/renommés et le contenu modifié, existe avec zéro code s'il n'est pas modifié) :

pkgdiff PKG-0.tgz PKG-1.tgz


Contrôlez-vous la création de ces fichiers tar ?
Si c'est le cas, la meilleure astuce serait de créer une somme de contrôle MD5 et de la stocker dans un fichier au sein même de l'archive. Ensuite, lorsque vous souhaitez comparer deux fichiers, il vous suffit d'extraire ces fichiers de somme de contrôle et de les comparer.

Si vous pouvez vous permettre d'extraire un seul fichier tar , vous pouvez utiliser le --diff possibilité de tar pour rechercher des différences avec le contenu d'un autre fichier tar.

Encore une astuce grossière si vous êtes d'accord avec juste une comparaison des noms de fichiers et de leurs tailles .
N'oubliez pas que cela ne garantit pas que les autres fichiers sont identiques !

exécuter un tar tvf pour lister le contenu de chaque fichier et stocker les sorties dans deux fichiers différents. puis, découpez tout en dehors des colonnes de nom de fichier et de taille. De préférence, triez également les deux fichiers. Ensuite, faites simplement un fichier diff entre les deux listes.

N'oubliez pas que ce dernier schéma ne fait pas vraiment de somme de contrôle.

Exemple de tar et de sortie (tous les fichiers ont une taille nulle dans cet exemple).

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

Commande pour générer une liste triée de noms/taille

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

Vous pouvez prendre deux de ces listes triées et les différencier.
Vous pouvez également utiliser les colonnes de date et d'heure si cela vous convient.


EDIT :Voir le commentaire de @StéphaneGourichon

Je me rends compte que c'est une réponse tardive, mais je suis tombé sur le fil en essayant d'obtenir la même chose. La solution que j'ai implémentée sort le tar vers stdout et le dirige vers le hachage que vous choisissez :

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

Notez que l'ordre des arguments est important; en particulier O qui signale d'utiliser stdout.


Linux
  1. Comment afficher le contenu des fichiers compressés sous Linux

  2. Comment extraire les fichiers .gz et .tar.gz sous Linux

  3. Comment rechercher des fichiers pour le contenu

  4. Comment comparer deux bases de données SQLite sous Linux

  5. Comment tarer les fichiers avec un ordre trié ?

Comment comparer et fusionner des fichiers texte sous Linux

Comment comparer et fusionner des fichiers texte sous Linux (partie 2)

Commande tar Linux - Comment compresser des fichiers sous Linux

Comment afficher deux fichiers côte à côte sous Linux

Comment comparer deux fichiers dans un terminal Linux

Comment comparer des fichiers binaires sous Linux ?