fdupes

Aus Foxwiki

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

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

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-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/