fdupes

Aus Foxwiki

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
  1. https://github.com/adrianlopezroche/fdupes
  2. https://alternativeto.net/software/fdupes/
  3. https://krausens-online.de/fdupes-duplikate-finden/