Dubletten finden

Im Laufe eines Computerlebens sammeln sich etliche Dateien in diversen Ordnern an. Darunter auch etliche Doubletten. Wie findet man die nun?

find . -type f -exec shasum {} \; | sort

Das ergibt eine Liste aller Dateien mit ihren Prüfsummen, sortiert nach der Prüfsumme. Die doppelten Dateien stehen dann direkt untereinander. Beispiel:

05139e49e7b7b0582e64c37f6c398a6d3b5b1626  ./image001.jpg
1cd5cb82e3edb9b86d6c3542096ae4f9db2d511a  ./olLHQBbS.zip.part
5989860fb95b002ab23d75c5cd6cfb28eefa62bd  ./Born_this_way-1.wmv
5989860fb95b002ab23d75c5cd6cfb28eefa62bd  ./Born_this_way.wmv
5ce085a90cfb1b0f67d95d438a08adb1d09e374f  ./DRP38559820-1.pdf
5ce085a90cfb1b0f67d95d438a08adb1d09e374f  ./DRP38559820-2.pdf
5ce085a90cfb1b0f67d95d438a08adb1d09e374f  ./DRP38559820-3.pdf
5ce085a90cfb1b0f67d95d438a08adb1d09e374f  ./DRP38559820-4.pdf
5ce085a90cfb1b0f67d95d438a08adb1d09e374f  ./DRP38559820.pdf
7614acd33466c5a5b76a245e8d3dcf2e7f98e29d  ./DRP38559820-1.sig

Hier sind mehrere Dubletten zu sehen, allerdings wirklich übersichtlich ist das nicht. Komfortabler geht es so:

find . -type f -exec shasum {} \; | sort | awk 'BEGIN{FS="  "} {if (c==$1) print "double: "$2", original is "o; else o=$2; c=$1}'

Damit sieht es dann so aus:

double: ./Born_this_way.wmv, original is ./Born_this_way-1.wmv
double: ./DRP38559820-2.pdf, original is ./DRP38559820-1.pdf
double: ./DRP38559820-3.pdf, original is ./DRP38559820-1.pdf
double: ./DRP38559820-4.pdf, original is ./DRP38559820-1.pdf
double: ./DRP38559820.pdf, original is ./DRP38559820-1.pdf