Um doppelte Dateien unter Linux per Kommandozeile zu finden, ohne etwas zu installieren, hashen Sie jede Datei und lassen uniq die Wiederholungen markieren: find d -type f -exec md5sum {} + | sort | uniq -w32 -dD. Fast alle Suchergebnisse sind Reviews von Tools, die man erst installieren muss — fdupes, rdfind, rmlint. Auf einem fremden Server oder in einem Wegwerf-Container lässt sich oft gar nichts installieren. Es folgt eine Pipeline nur aus Coreutils, plus die ehrliche Grenze, ab der sich ein echtes Tool doch lohnt.
1. Duplikate anhand des Inhalts, ganz ohne Pakete
$ clai finde Dateien mit identischem Inhalt im Ordner d→ find d -type f -exec md5sum {} + | sort | uniq -w32 -dD4f784201526479699db75d69c7abad6d d/a/one.txt4f784201526479699db75d69c7abad6d d/b/two-copy.txt
uniq -w32 vergleicht nur die ersten 32 Zeichen der Zeile — genau die Länge einer md5-Summe, der Vergleich läuft also über den Hash, nicht über den Namen. -d behält nur Wiederholungen, -D gibt alle Zeilen der Gruppe aus, nicht nur eine.
2. Erst zählen, dann entscheiden
$ clai wie viele Gruppen von Duplikaten gibt es insgesamt→ find d -type f -exec md5sum {} + | sort | uniq -w32 -d | wc -l
Eine Zeile pro Gruppe. Bei drei Gruppen reicht ein Blick. Bei dreitausend braucht man ein Tool mit interaktivem Modus, keine Pipeline.
3. Terabytes nicht umsonst hashen
$ clai finde Duplikate nur unter Dateien größer als 10 Megabyte→ find . -type f -size +10M -exec md5sum {} + | sort | uniq -w32 -dD
md5 liest die ganze Datei. In einem großen Baum beschleunigt die Filterung nach Größe alles um eine Größenordnung — und gerade die großen Dateien belegen den Platz.
4. Schneller: erst Größe, dann Hash
$ clai finde Duplikate schnell, indem zuerst nach Größe gefiltert wird→ find . -type f -printf '%s\n' | sort -n | uniq -d | while read s; do find . -type f -size "${s}c" -exec md5sum {} + ; done | sort | uniq -w32 -dD
Dateien unterschiedlicher Größe können keine Duplikate sein. Gehasht wird nur, wessen Größe übereinstimmt. Bei einer Million Dateien ist das der Unterschied zwischen Minuten und Stunden.
5. Eine Kopie pro Gruppe behalten
$ clai zeig mir welche Duplikate ich löschen kann, wenn ich je eine Kopie behalte→ find . -type f -exec md5sum {} + | sort | uniq -w32 -d --all-repeated=separate | awk 'seen[$1]++ {print $2}'
awk 'seen[$1]++' überspringt das erste Vorkommen eines Hashes und gibt alle folgenden aus — die Kandidaten zum Löschen. Das ist eine Liste zum Lesen, nicht zum Durchreichen an xargs rm. Lesen Sie sie.
6. Wann sich ein Tool doch lohnt
$ clai finde Duplikate und lass mich sie interaktiv löschen→ fdupes -r -d .
Bei Hunderten Gruppen, bei denen man für jede gefragt werden will, fragt fdupes -d, was behalten werden soll. rdfind kann Duplikate durch Hardlinks ersetzen, ohne etwas zu löschen. Die Pipeline oben ist für die Fälle, in denen sich gar keine Pakete installieren lassen.
Stolperfallen
- md5 reicht für Duplikate, aber nicht für Sicherheit. Eine md5-Kollision lässt sich absichtlich konstruieren, zufällig passiert das nicht. Für Integritätsprüfungen nehmen Sie sha256, für die Suche nach Kopien ist md5 schneller und ausreichend.
- Hardlinks sehen aus wie Duplikate. Dieselbe Datei unter zwei Namen ergibt denselben Hash, belegt aber nur einmal Platz. Filtern Sie nach Inode-Nummer:
find . -type f -printf '%i %p\n' | sort -u -k1,1. - Die Liste nie direkt an rm übergeben. Ein falscher Filter, und Sie löschen beide Kopien. Liste in eine Datei schreiben, lesen, dann löschen.
Verwandte Fragen
Wie finde ich Duplikate nach Namen statt nach Inhalt? find . -type f -printf '%f\n' | sort | uniq -d zeigt Dateinamen, die sich in verschiedenen Verzeichnissen wiederholen.
Funktioniert das unter macOS? Ersetzen Sie md5sum durch md5 -r — das Ausgabeformat passt. -printf bei find müssen Sie durch -exec stat -f ersetzen.
Was ist bei Hunderttausenden Dateien am schnellsten? Der Ansatz aus Abschnitt 4, oder rdfind, das vor dem Lesen der Platte nach Inode sortiert.
Siehe auch
- Welcher Ordner frisst die Platte? du, sortiert nach Größe
- df sagt, die Platte ist voll, du sagt, sie ist es nicht
- Schluss mit dem Auswendiglernen von find-Flags
CliAI hasht Ihre Dateien nicht für Sie, erspart Ihnen aber das ständige Neuerfinden des uniq -w32-Flags. In einer Zeile installieren.