Suche nach Dateiduplikaten in OSX nach Hash

14

Ich suche nach einer Möglichkeit, in OSX nach einer bestimmten Datei zu suchen (Maverick, aber allgemeiner OSX). 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 demselben Namen, ich möchte, dass die Vergleichsmethode ein Hashing-Algorithmus wie MD5, SHA usw. ist.

Die meisten der "Duplicate File Finder" habe ich versucht, nur nach allen Duplikaten in einem Laufwerk / System zu suchen. Ich wäre stattdessen daran interessiert, eine Datei einzureichen und nach ihren Duplikaten zu suchen.

Weiß jemand, ob ein solches Programm existiert? Vielleicht obskure Funktion von Spotlight?

nick2k3
quelle
1
Seien Sie vorsichtig mit einem Hash, der feststellt, ob es sich bei einer bestimmten Datei um eine Kopie handelt. Dieser Ansatz kann beispielsweise bei EMLX-Dateien (Apple Mail-Dateiformat) fehlschlagen. Als Hilfe für Spotlight hängt OSX Metadaten an Maildateien an. Dieselbe E-Mail in zwei verschiedenen Pfaden weist möglicherweise unterschiedliche Metadaten auf, obwohl die Nachrichten-ID identisch ist. Unterschiedlicher Hash für zwei Dateien, die exakt dieselbe Roh-E-Mail enthalten.
John D.

Antworten:

16

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

fdupes -r1 .|grep filename

-rkehrt in Verzeichnisse zurück und -1druckt jede Gruppe doppelter Dateien in einer einzigen Zeile.

Andere nützliche Beispiele:

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

fdupes -r . -dN löscht alle bis auf das erste Duplikat aus jeder Gruppe von Duplikaten;

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

Sie können installieren fdupesmit brew install fdupes.

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

Sie können dies einfach selbst mit einigen Shell-Befehlen 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 auf der gesamten CD ausführen) dauert jedoch sehr lange.


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
nohillside
quelle
Der allererste Durchgang sollte eine Entdeckung durch exakte Größenoperation sein.
user188421
@biziclop Wenn Sie nur nach einer Datei suchen möchten, ja. Wenn Sie nach mehreren suchen möchten, können Sie den Index schneller einmal erstellen und anschließend einfach die Indexdatei durchsuchen.
Nohillside
1
Natürlich ist mir gerade dieser Satz in der Frage aufgefallen: "Ich wäre stattdessen daran interessiert, eine Datei einzureichen und nach ihren Duplikaten zu suchen."
user188421
fdupes sollte schneller sein, zuerst wird ein Datumsvergleich durchgeführt, dann ein partieller Hash, dann ein vollständiger Hash.
Gagarine
1

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

198452 Bytes ist die Dateigröße, die ich verwendet habe, und die 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 zum Verzeichnis, das an den Befehl find gesendet wurde.

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

John D.
quelle
0

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

Sie können das gewünschte Verhalten für einen Ordner mit der betreffenden einzelnen Datei annähern und dann die Ordner hinzufügen, in denen Sie suchen möchten. Dadurch werden auch andere Dupes in den Suchpfaden angezeigt, sofern vorhanden.

Diese App hat viele nette Sortierfunktionen, die die Ergebnisse sehr leicht verständlich machen.

Ɱark Ƭ
quelle