Je vérifie donc le md5
hachage de mes fichiers avec ceci comme sortie:
657cf4512a77bf47c39a0482be8e41e0 ./dupes2.txt
657cf4512a77bf47c39a0482be8e41e0 ./dupes.txt
8d60a927ce0f411ec94ac26a4785f749 ./derpina.txt
15f63928b8a1d5337137c38b5d66eed3 ./foo.txt
8d60a927ce0f411ec94ac26a4785f749 ./derp.txt
Cependant, après avoir exécuté find . -type f -exec md5sum '{}' ';' | uniq -w 33
pour trouver les hachages uniques, j'obtiens ceci:
657cf4512a77bf47c39a0482be8e41e0 ./dupes2.txt
8d60a927ce0f411ec94ac26a4785f749 ./derpina.txt
15f63928b8a1d5337137c38b5d66eed3 ./foo.txt
8d60a927ce0f411ec94ac26a4785f749 ./derp.txt
D'après ma compréhension, un seul des deux derpina.txt
ou derp.txt
devrait apparaître, car leurs hachages sont les mêmes. Suis-je en train de manquer quelque chose? Quelqu'un peut-il m'éclairer sur les raisons pour lesquelles il sort comme ça?
command-line
bash
uniq
user2127726
la source
la source
Réponses:
Vous devez utiliser
sort
avantuniq
:uniq
supprime uniquement les lignes répétées. Il ne réordonne pas les lignes à la recherche de répétitions.sort
fait cette partie.Ceci est documenté dans
man uniq
:la source
uniq
devrait être alias commesort -u
par défaut dans tous les systèmes. Le cas échéant, il a toujours besoin de "trier" pour fonctionner correctement.uniq
a de nombreuses fonctionnalités non disponibles avecsort -u
. Il y a aussi des cas où l'on veut utiliseruniq
sanssort
.L'entrée pour
uniq
doit être triée. Donc, pour l'exemple,travaillerait. Le
-w
(--check-chars=N
) rend les lignes uniques uniquement en ce qui concerne la première colonne; Cette option fonctionne pour ce cas. mais les possibilités de spécifier les parties pertinentes de la ligneuniq
sont limitées. Par exemple, il n'y a pas d'options pour spécifier de travailler sur certaines colonnes 3 et 5, en ignorant la colonne 4.La commande
sort
a une option pour les lignes de sortie uniques elles-mêmes, et les lignes sont uniques en ce qui concerne les clés utilisées pour le tri. Cela signifie que nous pouvons utiliser la syntaxe de clé puissante desort
pour définir quelle partie les lignes doivent être uniq.Pour l'exemple,
donne juste le même résultat, mais la
sort
pièce est plus flexible pour d'autres utilisations.la source
Ou vous pouvez installer des killdupes, mon programme pour détruire chaque dernier doublon effing!
https://github.com/batchmcnulty/killdupes
:-)
la source