fdupes
fdupes - Identifizieren doppelt vorhandener Dateien
Beschreibung
- fdupes durchsucht Verzeichnisse und sucht Dateien mit gleichen Hash-Wert
- diese werden bitweise miteinander verglichen
Installation
# apt install fdupes
Aufruf
$ 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
Umgebung
Rückgabewert
Anwendung
- Duplikate finden
$ 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
- 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
- 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
- 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
- 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.
- 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]:
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
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.
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.
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-Page
Info-Pages
Links
Projekt
Weblinks
- https://github.com/adrianlopezroche/fdupes
- https://alternativeto.net/software/fdupes/
- https://krausens-online.de/fdupes-duplikate-finden/