J'ai un certain nombre de fichiers dans un répertoire et je veux vérifier qu'ils sont tous uniques. Pour simplifier, disons que j'ai trois fichiers: foo.txt
, bar.txt
et baz.txt
. Si je lance cette boucle, je les vérifierai tous les uns contre les autres:
$ for f in ./*; do for i in ./*; do diff -q "$f" "$i"; done; done
Files bar.txt and baz.txt differ
Files bar.txt and foo.txt differ
Files baz.txt and bar.txt differ
Files baz.txt and foo.txt differ
Files foo.txt and bar.txt differ
Files foo.txt and baz.txt differ
Pour les centaines de fichiers que je veux traiter, cela deviendrait assez illisible; il serait préférable de lister les fichiers qui font match et je peux regarder par- dessus la liste rapidement et assurez - vous que les fichiers ne sont eux - mêmes correspondent. À partir de la page de manuel, j'aurais pensé que l' -s
option accomplirait ceci:
$ for f in ./*; do for i in ./*; do diff -s "$f" "$i"; done; done
Files bar.txt and bar.txt are identical
Files baz.txt and baz.txt are identical
Files foo.txt and foo.txt are identical
... cependant, en fait, il imprime également tout le contenu des fichiers qui diffèrent. Existe-t-il un moyen de supprimer ce comportement, donc je ne reçois que le comportement ci-dessus?
Sinon, existe-t-il un autre outil qui peut accomplir cela ?
diff -qrs
pour comparer des fichiers volumineux (silencieux supprime les différences d'impression)L' outil le plus rapide écrit à cet effet est fdupes (il est disponible dans les repos packages de Fedora et Ubuntu et…)
Usage:
la source
Si vous avez besoin de trouver des fichiers identiques dans une liste, triez-les d'abord par taille, par exemple avec
puis pour chaque groupe de fichiers de taille identique, exécutez-
md5sum
les pour voir facilement lesquels sont identiques à lesquels.Pour les gros fichiers, il pourrait être plus rapide de commencer par une somme de contrôle uniquement une courte partie de l'ensemble du fichier:
puis effectuez une somme de contrôle complète uniquement sur les fichiers suspects.
la source