On a parfois des dossiers avec des contenus similaires et l’on a besoin de comparer les fichiers.
Deux commandes qui permettent de réaliser cette comparaison.

Avec la commande diff

Il faut utiliser l’option -r pour récursif.

Si on fait diff -r dossier1 dossier2 on obtient :

  • rien si les fichiers sont identiques
2076 $ diff -r dossier1 dossier2
  • la liste des différences
2080 $ diff -r dossier1 dossier2
diff -r dossier1/titi.txt dossier2/titi.txt
1d0
< BBBBB
diff -r dossier1/toto.txt dossier2/toto.txt
1d0
< AAAAA

Si on rajoute l’option -q alors on obtient uniquement la liste des fichiers :

diff -qr dossier1 dossier2
Les fichiers dossier1/titi.txt et dossier2/titi.txt sont différents
Les fichiers dossier1/toto.txt et dossier2/toto.txt sont différents

Avec la commande find

La commande find permet de rechercher des fichiers dans une arborescence. En précisant le type la recherche se fera uniquement sur des fichiers.
Pour afficher la liste des fichiers en excluant le nom des dossiers :

find dossier1 -type f
./dossier1/toto.txt
./dossier1/titi.txt

L’option -exec de la commande find permet d’appliquer une commande sur chacun des fichiers trouvés ; on peut calculer la somme de contrôle de chacun des fichiers.
Depuis le répertoire dossier1 :

find . -type f -exec md5sum {} \;
13376f69f75e938a0fa834f24cc3dd7a  ./toto.txt
4516710ae4ccb5ffd315125aabbbcd2d  ./titi.txt

En redirigeant le résultat des sommes de contrôle dans un fichier on peut ensuite contrôler le contenu de l’autre répertoire dossier2 :

md5sum -c ../md5.txt 
./toto.txt: Réussi
./titi.txt: Échec
md5sum: Attention : 1 somme de contrôle ne correspond pas