Suchen Sie Dateiduplikate in OSX nach Hash

Ich suche nach einer Möglichkeit, in OSX (Maverick, aber allgemeiner OSX) nach einer bestimmten Datei zu suchen. Insbesondere möchte ich Folgendes tun:
Bei einer Datei_001 möchte ich suchen, ob im Dateisystem eine Kopie dieser Datei vorhanden ist.
Nicht nur mit dem gleichen Namen, ich möchte, dass die Vergleichsmethode ein Hash-Algorithmus wie MD5, SHA usw. ist.

Die meisten "Sucher für doppelte Dateien", die ich ausprobiert habe, suchen nur nach allen Duplikaten in einem Laufwerk/System. Ich wäre stattdessen daran interessiert, eine Datei einzureichen und nach ihren Duplikaten zu suchen.

Weiß jemand, ob es ein solches Programm gibt? Vielleicht eine obskure Funktion von Spotlight?

Seien Sie vorsichtig bei einem Hash, der bestimmt, ob eine bestimmte Datei eine Kopie ist. Dieser Ansatz kann beispielsweise bei .emlx-Dateien (dem Dateiformat von Apple Mail) fehlschlagen. Als Hilfe für Spotlight fügt OSX Metadaten an Maildateien an. Dieselbe E-Mail in zwei verschiedenen Pfaden kann unterschiedliche Metadaten haben, obwohl die Nachrichten-ID dieselbe ist. Unterschiedlicher Hash für zwei Dateien, die genau dieselbe Roh-E-Mail enthalten.

Antworten (4)

Sie könnten auch verwenden fdupes. Es gibt keine Option, um nach Duplikaten einer bestimmten Datei zu suchen, aber Sie können die Ausgabe einfach nach dem Dateinamen suchen:

fdupes -r1 .|grep filename

-rrekursiv in Verzeichnisse und -1gibt jede Gruppe doppelter Dateien in einer einzigen Zeile aus.

Weitere nützliche Beispiele:

fdupes -r .findet alle doppelten Dateien im aktuellen Verzeichnis;

fdupes -r . -dNlöscht alle außer dem ersten Duplikat aus jeder Gruppe von Duplikaten;

fdupes -r dir1 dir2|grep dir1/|xargs rmentfernt Duplikate in dir1.

fdupesSie können mit installieren brew install fdupes.

Ist es möglich, eine Liste von Dateien zu haben, die KEIN Duplikat im aktuellen Verzeichnis sind?

Sie können dies mit einigen Shell-Befehlen leicht selbst erstellen:

  • find ~ -type f -exec md5 -r '{}' \; > /tmp/md5.list

    erstellt eine Liste von md5-Hashes über alle Ihre Dateien.

  • grep $(md5 -q FILE-TO-SEARCH) /tmp/md5.list

    sucht nach dem md5-Hash von FILE-TO-SEARCH

Das Ausführen des ersten Befehls (insbesondere wenn Sie ihn über die gesamte Disc ausführen) wird jedoch lange dauern.


Wenn Sie nur nach einer Datei suchen möchten, können Sie auch verwenden

SIZE=$(stat -f '%z' FILE-TO-SEARCH)
MD5=$(md5 -q FILE-TO-SEARCH)
find ~ -type f -size ${SIZE}c | while read f; do
    [[ $MD5 = $(md5 -q "$f") ]] && echo $f
done
    
Der allererste Durchgang sollte eine Suche nach exakter Größe sein.
@biziclop Wenn Sie nur nach einer Datei suchen möchten, ja. Wenn Sie nach mehreren suchen möchten, ist es schneller, den Index einmal zu erstellen und anschließend nur die Indexdatei zu durchsuchen.
Es stimmt natürlich, mir ist gerade dieser Satz in der Frage aufgefallen: "Ich wäre stattdessen daran interessiert, eine Datei einzureichen und nach Duplikaten zu suchen."
fdupes sollte schneller sein, wenn es zuerst einen Datumsvergleich durchführt, dann einen teilweisen Hash und dann einen vollständigen Hash.

Dies sollte funktionieren, wenn Sie die Größe und den Hash für FILE_001 in den Befehl einfügen.

198452 Bytes ist die Dateigröße, die ich verwendet habe, und der Datei-md5-Hash ist 3915dc84b4f464d0d550113287c8273b

find . -type f -size 198452c -exec md5 -r {} \; |
    grep -o "3915dc84b4f464d0d550113287c8273b\ \(.*\)" | awk '{print $2}'

Die Ausgabe ist eine Liste von Dateien mit Pfadnamen relativ zu dem Verzeichnis, das an den find-Befehl gesendet wird.

Dieser Ansatz hat den Vorteil, dass nur Dateien gehasht werden, die der Größe Ihres Originals entsprechen, und nur Dateinamen ausgegeben werden, die dem Hash entsprechen.

Wenn Sie sich nicht mit Skripten herumschlagen möchten, können Sie sich mit Araxis Find Duplicate Files $10 im Mac App Store dem gewünschten Verhalten annähern . Es gibt auch eine 7-Tage-Demo auf ihrer Website. Find Duplicate Files sucht nach Duplikaten, indem der Hash für jede Datei berechnet wird.

Sie können das gewünschte Verhalten annähern, indem Sie einen Ordner mit der einzelnen Datei einrichten, die Sie betrifft, und dann die Ordner hinzufügen, in denen Sie suchen möchten. Dadurch werden auch andere Duplikate, falls vorhanden, in den Suchpfaden gemeldet.

Diese App hat viele nette Sortierfunktionen, die die Ergebnisse sehr einfach zu verstehen machen.