linux - files - man diff




Étant donné deux arborescences de répertoires, comment puis-je savoir quels fichiers diffèrent? (6)

Si je veux trouver les différences entre deux arborescences de répertoires, je ne fais qu'exécuter:

diff -r dir1/ dir2/

Cela renvoie exactement les différences entre les fichiers correspondants. Je suis intéressé à juste obtenir une liste de fichiers correspondants dont le contenu diffère. J'ai supposé qu'il s'agirait simplement de passer une option de ligne de commande à diff , mais je n'ai rien trouvé sur la page de manuel.

Aucune suggestion?


Ces deux commandes font essentiellement la chose demandée:

diff --brief --recursive --no-dereference --new-file --no-ignore-file-name-case /dir1 /dir2 > dirdiff_1.txt

rsync --recursive --delete --links --checksum --verbose --dry-run /dir1/ /dir2/ > dirdiff_2.txt

Le choix entre eux dépend de l'emplacement de dir1 et dir2:

Lorsque les répertoires résident sur deux lecteurs distincts, diff surpasse rsync. Mais lorsque les deux répertoires comparés sont sur le même lecteur, rsync est plus rapide. C'est parce que diff met une charge presque égale sur les deux répertoires en parallèle, ce qui maximise la charge sur les deux disques.

rsync calcule les sommes de contrôle en gros morceaux avant de les comparer. Cela regroupe les opérations d'E / S en gros morceaux et conduit à un traitement plus efficace lorsque les choses se déroulent sur un seul disque.


J'aime utiliser git diff --no-index dir1/ dir2/ , car il peut montrer les différences de couleur (si vous avez cette option dans votre config git) et parce qu'il montre toutes les différences dans une sortie longue paginée en utilisant "Moins".


La find diff utilise cette commande:

diff -qr dir1/ dir2/

-r différera aussi tous les sous-répertoires -q dit à diff de ne rapporter que lorsque les fichiers sont différents.

diff  --brief dir1/ dir2/

--brief montrera les fichiers qui existent dans le répertoire.

Ou sinon

nous pouvons utiliser Meld qui montrera dans une fenêtre graphique qu'il est facile de trouver la différence.

meld  dir1/ dir2/

Manche compatriote 'billings' (de freenode / # centos fame) a partagé sa méthode avec moi:

diff -Naur dir1/ dir2

Y compris la barre oblique finale du répertoire n'a pas d'importance.

En outre, il semble que l'option -u n'est pas disponible sur certaines versions anciennes / serveur de diff.

La différence en diffs:

# diff -Nar /tmp/dir1 /tmp/dir2/
diff -Nar /tmp/dir1/file /tmp/dir2/file
28a29
> TEST

# diff -qr /tmp/dir1/ /tmp/dir2/
Files /tmp/dir1/file and /tmp/dir2/file differ

Vous pouvez also utiliser Rsync et find . Pour find :

find $FOLDER -type f | cut -d/ -f2- | sort > /tmp/file_list_$FOLDER

Mais les fichiers avec les mêmes noms et dans les mêmes sous-dossiers, mais avec un contenu différent, ne seront pas affichés dans les listes.

Si vous êtes un fan de GUI, vous pouvez vérifier Meld que mentionné. Cela fonctionne très bien dans Windows et Linux.


Diffoscope est un excellent outil de Diffoscope répertoires basé sur la ligne de commande.

J'aime particulièrement à ce sujet qu'il peut diff dans les fichiers:

Il décomposera récursivement les archives de plusieurs types et transformera divers formats binaires en une forme plus lisible pour les comparer. Il peut comparer deux tarballs, images ISO ou PDF aussi facilement.

Non seulement vous dire quels fichiers diffèrent, mais aussi comment ils diffèrent.







diff