fdupes
fdupes - Identifizieren doppelt vorhandener Dateien
Beschreibung
fdupes durchsucht vorgegebene Verzeichnisse und sucht Dateien mit gleichen Hash-Wert.
- Werden Dateien mit gleichem Hash-Wert gefunden, werden diese noch bitweise miteinander verglichen.
Installation
# apt install fdupes
Syntax
$ fdupes [Optionen] VERZEICHNIS...
Optionen
unix | gnu | Beschreibung |
---|---|---|
-r | --recurse | für jedes angegebene Verzeichnis folge den Unterverzeichnissen im Inneren angetroffen |
-R | --recurse | für jedes nach dieser Option angegebene Verzeichnis folgen darin gefundene Unterverzeichnisse (beachten Sie das ':' at am Ende der Option, Manpage für weitere Details) |
-s | --symlinks | folgen Symlinks |
-H | --hardlinks | normalerweise, wenn zwei oder mehr Dateien auf dieselbe verweisen Plattenbereich werden sie als Nicht-Duplikate behandelt; Diese Option wird dieses Verhalten ändern |
-G | --minsize=SIZE | berücksichtigt nur Dateien größer oder gleich SIZE in Bytes |
-L | --maxsize=SIZE | berücksichtigt nur Dateien kleiner oder gleich SIZE in Bytes |
-n | --noempty | schließt Dateien der Länge null von der Berücksichtigung aus |
-A | --nohidden | schließt versteckte Dateien von der Betrachtung aus |
-f | --omitfirst | lässt die erste Datei in jedem Satz von Übereinstimmungen aus |
-S | --size | Größe der doppelten Dateien anzeigen |
-t | --time | zeigt die Änderungszeit doppelter Dateien an |
-m | --summarize | Duplikatinformationen zusammenfassen |
-q | --quiet | Fortschrittsanzeige ausblenden |
-d | --delete | fordert den Benutzer auf, Dateien aufzubewahren und alle zu löschen Andere; wichtig: unter besonderen Umständen, Daten können verloren gehen, wenn diese Option zusammen verwendet wird mit -s oder --symlinks oder bei Angabe von a bestimmtes Verzeichnis mehr als einmal; beziehen sich auf die fdupes-Dokumentation für zusätzliche Informationen |
-P | --plain | with --delete, zeilenbasierte Eingabeaufforderung verwenden (wie bei älteren Versionen von fdupes) statt Bildschirmmodus-Schnittstelle |
-N | --noprompt | zusammen mit --delete, bewahrt die erste Datei in jeden Satz Duplikate und löschen Sie den Rest ohne den Benutzer auffordern |
-I | --Sofort | lösche Duplikate, wenn sie angetroffen werden, ohne Gruppieren in Sätze; impliziert --noprompt |
-p | --permissions | berücksichtigt keine Dateien mit unterschiedlichen Besitzern/Gruppen oder Berechtigungsbits als Duplikate |
-o | --order=BY | Auswahl der Sortierreihenfolge für die Ausgabe und das Löschen; nach Datei Änderungszeit (BY='time'; Standard), Status Zeit ändern (BY='ctime') oder Dateiname (BY='name') |
-i | --Umkehren | der umgekehrten Reihenfolge beim Sortieren |
-l | --log=LOGFILE | Löschoptionen für Protokolldateien in LOGFILE |
-v | --version | fdupes-Version anzeigen |
-h | --help | zeigt diese Hilfenachricht an |
Parameter
Umgebungsvariablen
Exit-Status
Anwendung
$ fdupes -rHdf /tmp/bsi/
$ fdupes -rHdfN /media/daten/kurse/
Um Duplikate zu finden, müssen Sie nur:
$ fdupes /path/to/some/directory
Dieser Befehl sucht nur im Verzeichnis, das als Argument angegeben wurde, und druckt die Liste der doppelten Dateien aus (falls vorhanden). Wenn Sie auch in Unterverzeichnisse suchen, müssen Sie die Option "-r" hinzufügen, die für "rekursiv" steht.
Und was, wenn Sie die Größe von Dateien sehen möchten?
$ fdupes -S /path/to/some/directory
Sie können mehr als ein Verzeichnis angeben:
$ fdupes /path/to/first/directory /path/to/second/directory
und so weiter.
Wenn Sie alle Duplikate löschen wollen
$ fdupes -d /path/to/directory
Dadurch wird eine Kopie beibehalten und alles andere gelöscht.
$ fdupes ./
ergibt folgendes Ergebnis:./File1.txt ./File1-Kopie1.txt ./File1-Kopie2.txt ./File2.txt ./File2-Kopie1.txt
./File1.txt./File1-Kopie1.txt./File1-Kopie2.txt ./File2.txt./File2-Kopie1.txt
Mit dem Parameter -r (recursive in alle ab Suchpfand vorhandenen Unterverzeichnissen) ergibt sich folgende Ausgabe.
$ fdupes ./ -r ./File1.txt ./File1-Kopie1.txt ./File1-Kopie2.txt ./anderer_ort/File1-Kopie2.txt ./anderer_ort/File1-Kopie1.txt ./File2.txt ./File2-Kopie1.txt ./anderer_ort/File2-Kopie1.txt
$ fdupes ./ -r./File1.txt./File1-Kopie1.txt./File1-Kopie2.txt./anderer_ort/File1-Kopie2.txt./anderer_ort/File1-Kopie1.txt ./File2.txt./File2-Kopie1.txt./anderer_ort/File2-Kopie1.txt
Mit dem zusätzlichen Parameter -f (weglassen des ersten Treffers) ergibt sich folgende Ausgabe.
$ fdupes -r -f ./File1-Kopie1.txt ./File1-Kopie2.txt ./anderer_ort/File1-Kopie2.txt ./anderer_ort/File1-Kopie1.txt ./File2-Kopie1.txt ./anderer_ort/File2-Kopie1.txt
$ fdupes -r -f./File1-Kopie1.txt./File1-Kopie2.txt./anderer_ort/File1-Kopie2.txt./anderer_ort/File1-Kopie1.txt ./File2-Kopie1.txt./anderer_ort/File2-Kopie1.txt
Mit dem Parameter -m (Zusammenzählen der Dateigrößen) wird ausgegeben, wieviel Platz durch doppelte Dateien belegt werden.
$ fdupes ./ -r -m 6 duplicate files (in 2 sets), occupying 130 bytes.
$ fdupes ./ -r -m6 duplicate files (in 2 sets), occupying 130 bytes.
Mit dem Parameter -d werden doppelte Dateien mit Rückfrage gelöscht (Parameter können auch einfach aneiander geschrieben werden).
$ fdupes ./ -rd [1] ./File1.txt [2] ./File1-Kopie1.txt [3] ./File1-Kopie2.txt [4] ./anderer_ort/File1-Kopie2.txt [5] ./anderer_ort/File1-Kopie1.txt Set 2 of 2, preserve files [1 - 5, all]:
$ fdupes ./ -rd[1] ./File1.txt[2] ./File1-Kopie1.txt[3] ./File1-Kopie2.txt[4] ./anderer_ort/File1-Kopie2.txt[5] ./anderer_ort/File1-Kopie1.txt Set 2 of 2, preserve files [1 - 5, all]:
Man kann nun auswählen, welche Datei man behalten möchte (1-5).
- Alle anderen Files werden gelöscht.
- Mit der Angabe von „all“ werden alle Dateien behalten.In diesem Fall wählen wir die 1. Datei aus (Eingabe: 1)Set 1 of 1, preserve files [1 - 5, all]: 1 [+] ./File1.txt [-] ./File1-Kopie1.txt [-] ./File1-Kopie2.txt [-] ./anderer_ort/File1-Kopie2.txt [-] ./anderer_ort/File1-Kopie1.txt
Set 1 of 1, preserve files [1 - 5, all]: 1 [+] ./File1.txt[-] ./File1-Kopie1.txt[-] ./File1-Kopie2.txt[-] ./anderer_ort/File1-Kopie2.txt[-] ./anderer_ort/File1-Kopie1.txt
Die Datei mit dem „[+]“ wird behalten, alle anderen Dateien ( [-] ) werden glöscht.Diese Frage kommt bei jeden Treffer von doppelt vorhandenen Dateien.
Ein Löschen ohne Nachfrage erfolgt mit dem Parameter -N. Mit Verwendung dieses Parameters -N wird immer der erste Treffer erhalten und alle anderen Dateien gelöscht.ACHTUNG: Die erste Datei, welche fdupes annimmt, ist nicht immer auch die Datei, welche man erhalten möchte.
Wesentlich „ungefährlicher“ ist da die Verwendung des Parameters -L (erstellt Hardlinks anstatt zu löschen).Dieser Parameter ist z. B. : in fdupes 1.50-PR2 vorhanden.
$ fdupes ./ -rL [+] ./anderer_ort/File2-Kopie1.txt [h] ./File2-Kopie1.txt [h] ./File2.txt [+] ./File1-Kopie2.txt [h] ./anderer_ort/File1-Kopie2.txt [h] ./anderer_ort/File1-Kopie1.txt [h] ./File1.txt [h] ./File1-Kopie1.txt
$ fdupes ./ -rL[+] ./anderer_ort/File2-Kopie1.txt[h] ./File2-Kopie1.txt[h] ./File2.txt [+] ./File1-Kopie2.txt[h] ./anderer_ort/File1-Kopie2.txt[h] ./anderer_ort/File1-Kopie1.txt[h] ./File1.txt[h] ./File1-Kopie1.txt
Das „[L]“ gibt an, dass die Datei nun durch Hardlinks verbunden wurden.
- Dadurch ist die Datei noch in allen Verzeichnissen erhalten, belegt aber nur einmal den Speicherplatz dafür.Man erkennt das an den Inodes der Dateien.(Vor fdupes ./ -rL)
$ ls -liR .: insgesamt 24 83 drwxr-xr-x 2 root root 4096 12. Okt 10:38 anderer_ort 96 -rw-r--r-- 1 root root 20 12. Okt 10:38 File1-Kopie1.txt 85 -rw-r--r-- 1 root root 20 12. Okt 10:38 File1-Kopie2.txt 95 -rw-r--r-- 1 root root 20 12. Okt 10:38 File1.txt 86 -rw-r--r-- 1 root root 25 12. Okt 10:38 File2-Kopie1.txt 87 -rw-r--r-- 1 root root 25 12. Okt 10:38 File2.txt ./anderer_ort: insgesamt 12 79 -rw-r--r-- 1 root root 20 12. Okt 10:38 File1-Kopie1.txt 77 -rw-r--r-- 1 root root 20 12. Okt 10:38 File1-Kopie2.txt 78 -rw-r--r-- 1 root root 25 12. Okt 10:38 File2-Kopie1.txt
$ ls -liR.:insgesamt 2483 drwxr-xr-x 2 root root 4096 12. Okt 10:38 anderer_ort96 -rw-r--r-- 1 root root 20 12. Okt 10:38 File1-Kopie1.txt85 -rw-r--r-- 1 root root 20 12. Okt 10:38 File1-Kopie2.txt95 -rw-r--r-- 1 root root 20 12. Okt 10:38 File1.txt86 -rw-r--r-- 1 root root 25 12. Okt 10:38 File2-Kopie1.txt87 -rw-r--r-- 1 root root 25 12. Okt 10:38 File2.txt ./anderer_ort:insgesamt 1279 -rw-r--r-- 1 root root 20 12. Okt 10:38 File1-Kopie1.txt77 -rw-r--r-- 1 root root 20 12. Okt 10:38 File1-Kopie2.txt78 -rw-r--r-- 1 root root 25 12. Okt 10:38 File2-Kopie1.txt
(Nach fdupes ./ -rL)
$ ls -liR .: insgesamt 24 83 drwxr-xr-x 2 root root 4096 12. Okt 10:39 anderer_ort 85 -rw-r--r-- 5 root root 20 12. Okt 10:38 File1-Kopie1.txt 85 -rw-r--r-- 5 root root 20 12. Okt 10:38 File1-Kopie2.txt 85 -rw-r--r-- 5 root root 20 12. Okt 10:38 File1.txt 78 -rw-r--r-- 3 root root 25 12. Okt 10:38 File2-Kopie1.txt 78 -rw-r--r-- 3 root root 25 12. Okt 10:38 File2.txt ./anderer_ort: insgesamt 12 85 -rw-r--r-- 5 root root 20 12. Okt 10:38 File1-Kopie1.txt 85 -rw-r--r-- 5 root root 20 12. Okt 10:38 File1-Kopie2.txt 78 -rw-r--r-- 3 root root 25 12. Okt 10:38 File2-Kopie1.txt
$ ls -liR.:insgesamt 2483 drwxr-xr-x 2 root root 4096 12. Okt 10:39 anderer_ort85 -rw-r--r-- 5 root root 20 12. Okt 10:38 File1-Kopie1.txt85 -rw-r--r-- 5 root root 20 12. Okt 10:38 File1-Kopie2.txt85 -rw-r--r-- 5 root root 20 12. Okt 10:38 File1.txt78 -rw-r--r-- 3 root root 25 12. Okt 10:38 File2-Kopie1.txt78 -rw-r--r-- 3 root root 25 12. Okt 10:38 File2.txt ./anderer_ort:insgesamt 1285 -rw-r--r-- 5 root root 20 12. Okt 10:38 File1-Kopie1.txt85 -rw-r--r-- 5 root root 20 12. Okt 10:38 File1-Kopie2.txt78 -rw-r--r-- 3 root root 25 12. Okt 10:38 File2-Kopie1.txt
Während vorher alle Dateien eine eigene Inode hatten (erste Spalte), haben nun mehrere Dateien die gleiche Inode.
- Sie verweisen demnach alle auf die gleiche Datei.Eine Datei mit mehreren Hardlinks existiert solange mindestens ein Verweis auf diese Datei vorhanden ist.
- Es ist demnach egal welche Datei man löscht; es gibt keine „Haupt“-Datei wie z. B. : bei symbolischen Links.
Die Gefahr von Hardlinks.Hardlinks verweisen immer auf die gleiche Datei.
- Es ist somit egal von welchen Verzeichnis man auf die Datei zugreift, Änderungen an der Datei sind immer für alle Links gültig.Man sollte vorsichtig sein, wann man Hardlinks einsetzt.Wenn man eine Musiksammlung hat, in denen gleiche Musikstücke (gleich in den Bit!) mehrfach vorhanden sind weil diese z. B. : auf mehreren Sampler-CD´s angeboten werden, kann man Hardlinks durchaus verwenden um Fesplattenplatz zu sparen.Gleiches Gilt z. B. : auch für Fotosammlungen.In beiden Fällen würde man ein Musikfile oder Bild nicht ändern oder, wenn man es ändert, unter einen neuen Namen abspeichern.Problematisch wird es, wenn man mehrere Stände von Projekt-Dateien abspeichert, um eine Histoire eines Projektes zu haben.
- Zwar würden auch hier alle doppelten Dateien verlinkt, aber es kann vorkammen, dass man eine solche Datei in einer aktuellen Projekt-Version ändert.
- In diesen Fall würde diese Datei aber auch in allen vorherig abgespeichterten Versionen geändert.
- Somit wäre zuvor abgespeicherten Projekt-Stände verfälscht, da sie nicht dem ursprünglichen Stand entsprechen.
Anmerkungen
Sofern nicht -1 oder --sameline angegeben ist, werden doppelte Dateien aufgelistet in Gruppen zusammengefasst, wobei jede Datei in einer eigenen Zeile angezeigt wird.
- Der Gruppen werden dann durch Leerzeilen voneinander getrennt.
- Wenn -1 oder --sameline angegeben ist, werden Leerzeichen und umgekehrte Schrägstriche (\) in einem Dateinamen erscheinen, wird ein umgekehrter Schrägstrich vorangestellt.
- Für Beispiel wird "mit Leerzeichen" zu "mit\ Leerzeichen".
Bei Verwendung von -d oder --delete ist darauf zu achten, dass Sie sich gegen versehentlicher Datenverlust.
- Während keine Informationen sofort verfügbar sind verloren, die Verwendung dieser Option zusammen mit -s oder --symlink kann dazu führen, dass zu verwirrenden Informationen, die dem Benutzer angezeigt werden, wenn er dazu aufgefordert wird um Dateien aufzubewahren.
- Insbesondere könnte ein Benutzer versehentlich Behalten Sie einen symbolischen Link bei, während Sie die Datei löschen, auf die er verweist.
- Ein ähnliches Problem tritt auf, wenn ein bestimmtes Verzeichnis mehr als . angegeben wird Einmal.
- Alle Dateien in diesem Verzeichnis werden als ihre eigenen aufgelistet Duplikate, die zu Datenverlust führen, sollte ein Benutzer eine Datei aufbewahren ohne sein "Duplikat" (die Datei selbst!).
Gefahr von Hardlinks
- Hardlinks verweisen immer auf die gleiche Datei.
- Es ist somit egal von welchen Verzeichnis man auf die Datei zugreift, Änderungen an der Datei sind immer für alle Links gültig.
- Man sollte vorsichtig sein, wann man Hardlinks einsetzt.
- Wenn man eine Musiksammlung hat, in denen gleiche Musikstücke (gleich in den Bit!) mehrfach vorhanden sind weil diese z. B. : auf mehreren Sampler-CD´s angeboten werden, kann man Hardlinks durchaus verwenden um Fesplattenplatz zu sparen.
- Gleiches Gilt z. B. : auch für Fotosammlungen.
- In beiden Fällen würde man ein Musikfile oder Bild nicht ändern oder, wenn man es ändert, unter einen neuen Namen abspeichern.
- Problematisch wird es, wenn man mehrere Stände von Projekt-Dateien abspeichert, um eine Histoire eines Projektes zu haben.
- Zwar würden auch hier alle doppelten Dateien verlinkt, aber es kann vorkammen, dass man eine solche Datei in einer aktuellen Projekt-Version ändert.
- In diesen Fall würde diese Datei aber auch in allen vorherig abgespeichterten Versionen geändert.
- Somit wäre zuvor abgespeicherten Projekt-Stände verfälscht, da sie nicht dem ursprünglichen Stand entsprechen.
Fehlerbehebung
Konfiguration
Dateien
Anhang
Siehe auch
- detox - Safely removes spaces and strange characters from filenames
- fslint - Utility to find redundant disk usage and duplicate files
- dupemgr - is a command-line utility to identify duplicates of files
- dupfinder - searches for duplicate files
- fastdup - Tool to find copies of the same file within directory tree(s)
- finddupe - A command line C program to catalog very large archives
- freedup - allows you to reclaim space on your drive
Dokumentation
RFC
Man-Pages
Info-Pages
Links
Projekt
Weblinks
- https://github.com/adrianlopezroche/fdupes
- https://alternativeto.net/software/fdupes/
- https://krausens-online.de/fdupes-duplikate-finden/