Utility to discover double files
License: GPL v2
Download: fdf-0.2.2.tar.gz (13,5 KB)
Ein komfortables Tool um doppelte Dateien zu finden. Für die eingegeben Pfade überprüft es die enthaltenen Dateien auf gleichen Inhalt und gibt die Übereinstimmenden aus.
Changelog
Update auf 0.2.2 (07.03.2009, 00:52)
- man-page beigefügt
Update auf 0.2.1 (24.02.2009, 17:09)
- Auflösung symbolischer Links repariert (rekursive Symlinks funktionieren immernoch nicht - dafür bedarf es der Erkennung, dass zwei Dateien die selben sind)
- Zwei Fehler in der neuen Vergleichsroutine behoben, beides Zugriffe auf evtl. nicht allokierten Speicher
Update auf 0.2 (24.02.2009, 04:06)
-
Neue Option (
-S
) zur Ausgabe von Dateien, die alle äußeren Kriterien an gleiche Dateien erfüllen (Dateigröße, gleiche Dateinamen - falls spezifiziert), aber die sich in ihren Daten doch unterscheiden. -
Komplette Überarbeitung des Vergleichsalgorithmus
- Geschwindigkeitssteigerung durch Benutzung von Memory Mapped Files sodass die CPU nicht mehr der limitierende Faktor ist
- Der Fehler zuvieler geöffneter Dateien wurde dadurch unterbunden, dass immer max. 2 Dateien geöffnet sind (resultiert ebenfalls in einer Geschwindigkeitssteigerung durch nur mehr sequentielles Lesen)
- Behebung der Fehler in den Funktionen der
-0
- und-z
-Schalter
Optionen
Test for double files Usage: fdf [OPTS] { - | FILE } [ [OPTS] FILE ... ] Options affecting only the input specified subsequently: -r don't recurse into directories -s follow symbolic links (can't handle recusive links yet) -x stay on the filesystem the input resides on (recursive mode) -l RANGE limit files to scan to those whose size is in RANGE -c scan content of symbolic links and identify doubles (if used with the switch -s, only the contents of the first symlink encountered will be scanned) -p mark input as preferred, output only doubles from this input when matching files from other inputs are found RANGE is specified by [SIZE]-[SIZE], whereas SIZE is a positive integer which may be post-fixed by 'b', 'k', 'm', 'g', 't', for bytes, kilo-, mega-, giga- bytes, etc. The lower or upper limit can be omitted. Other options: -o FILE redirect output to FILE -0 separate file names from stdin by 0x00-bytes instead of newline -z when writing file names, separate by 0x00-bytes instead of newline -f file names of doubles must match as well -S reverse mode, output single files, which have no doubles -k fail fast -v verbose output -D debug output (generally not wanted) -q suppress any output (except for -o option)
Ausgabe
Betrachtung des Inhalts eines Verzeichnisses test
:
$ ls -l test/ test/bla? test/: -rw-r--r-- 1 kane kane 0 18. Feb 17:14 bla drwxr-xr-x 2 kane kane 4 20. Feb 17:21 bla1 drwxr-xr-x 2 kane kane 3 20. Feb 17:21 bla2 drwxr-xr-x 2 kane kane 3 20. Feb 17:21 bla3 lrwxrwxrwx 1 kane kane 3 20. Feb 15:32 bla-ln -> bla lrwxrwxrwx 1 kane kane 3 20. Feb 15:54 bla-ln2 -> bla lrwxrwxrwx 1 kane kane 3 20. Feb 16:07 bla-ln3 -> blo -rw-r--r-- 1 kane kane 75 18. Feb 17:17 buidl1 -rw-r--r-- 1 kane kane 76 18. Feb 16:35 build -rw-r--r-- 1 kane kane 73 17. Feb 16:03 build2 test/bla1: -rw-r--r-- 1 kane kane 73 17. Feb 17:11 build -rw-r--r-- 1 kane kane 75 18. Feb 17:15 build3 test/bla2: -rw-r--r-- 1 kane kane 73 17. Feb 17:11 build2 test/bla3: -rw-r--r-- 1 kane kane 75 18. Feb 17:15 build3
Und die Ausgabe von fdf
für dieses Verzeichnis:
$ fdf -c test
found 11 files...
Input# Pref Chunk# Size Path
1 . 0 3 b test/bla-ln2
1 . 1 3 b test/bla-ln
1 . 0 73 b test/build2
1 . 1 73 b test/bla2/build2
1 . 2 73 b test/bla1/build
1 . 0 75 b test/buidl1
1 . 1 75 b test/bla3/build3
1 . 2 75 b test/bla1/build3
Es ist zu erkennen, dass die Dateien build2
, bla2/build2
und
bla1/build
miteinander übereinstimmen, sowie ebenfalls buidl1
,
bla3/build3
und bla1/build3
. Die einzelnen Blöcke sind durch eine
Leerzeile getrennt und enthalten Dateien, die den gleichen Inhalt besitzen.
Weil fdf
mit -c
aufgerufen wurde, hat es die beiden symbolischen
Links bla-ln2
und bla-ln
, die den gleichen Inhalt haben, ebenfalls
untersucht und ausgegeben. Diese Überprüfung ist unabhängig von dem tatsächlichen Ziel der
Symlinks. Soll dieses untersucht werden, so ist -s
erforderlich.
Die einzelnen, durch Tab-Symbole getrennten Spalten der Ausgabe besagen Folgendes:
Input#
: Die Nummer des Inputs wie in der Kommandozeile angegeben, beginnend bei 1; hier wurde nur ein Input (test
) angegeben, sodass überall1
erscheint.Pref
: Mittels des-p
-Schalters kann ein Input als "preferiert" markiert werden; in der Ausgabe schlägt sich das für die zugehörige Datei wie folgt nieder:.
: der Input wurde nicht als preferiert markiertp
: der Input wurde als preferiert markiert aber es gab keine nicht-preferierten Inputs im aktuellen BlockP
: der Input wurde als preferiert markiert und es gab andere, unterdrückte Input-Spezifikationen auf der Kommandozeile, die Dateien gleichen Inhalts enthielten im aktuellen Block
Chunk#
: Nummer der Datei im aktuellen Blocks an zu vergleichenden Dateien (sprich, diejenigen, die die äußeren Kriterien an gleiche Dateien erfüllen: mindestens gleiche Dateigröße, optional via-f
-Schalter auch gleicher Dateiname)Size
: Die Größe der Datei mit Suffix für Kilo-, Mega-, etc. -bytePath
: Pfad der Datei