Gibt es eine Möglichkeit, Dateien anhand des Hash-Werts zu suchen?

Gibt es eine Möglichkeit, Dateien anhand des Hash-Werts zu suchen?

Gibt es eine Möglichkeit, bei der Suche nach Dateien einen Hash-Wert als Eingabe und eine vollständige Liste der Dateien und ihrer Speicherorte als Ausgabe zu erhalten?

Dies kann hilfreich sein, wenn Sie versuchen, doppelte Dateien zu finden. Ich befinde mich oft in Situationen, in denen ich einen Haufen Dateien habe, von denen ich weiß, dass ich sie bereits an einem Ort gespeichert habe, aber ich weiß nicht, wo. Im Grunde sind es Duplikate.

Ich könnte beispielsweise eine Menge Dateien auf einer tragbaren Festplatte haben und auch Ausdrucke dieser Dateien auf der internen Festplatte eines Desktop-Computers ... aber ich bin mir nicht sicher, wo sie sich befinden! Wenn die Dateien nicht umbenannt wurden, könnte ich eine Dateinamensuche durchführen, um zu versuchen, den Ausdruck auf dem Desktop zu finden. Ich könnte sie dann nebeneinander vergleichen und, falls sie gleich sind, die Kopie löschen, die ich auf der tragbaren Festplatte habe. Aber wenn die Dateien auf einer der Festplatten umbenannt wurden, würde dies wahrscheinlich nicht funktionieren (je nachdem, wie sehr sich die neuen Namen vom Original unterscheiden).

Wenn eine Datei umbenannt, aber nicht bearbeitet wird, könnte ich ihren Hashwert berechnen, z. B. ist der SHA1-Wert 74e7432df4a66f246b5214d60b190b67e2f6ce52. Ich möchte diesen Wert dann als Eingabe bei der Suche nach Dateien haben und das Betriebssystem ein bestimmtes Verzeichnis oder das gesamte Dateisystem nach Dateien mit genau diesem SHA1-Hashwert durchsuchen lassen und eine vollständige Liste der Speicherorte ausgeben, an denen diese Dateien gespeichert sind.

Ich verwende Windows, bin aber grundsätzlich daran interessiert, zu erfahren, wie so etwas unabhängig vom Betriebssystem erreicht werden kann.

Antwort1

Linux-Beispiel:

hash='74e7432df4a66f246b5214d60b190b67e2f6ce52'
find . -type f -exec sh -c '
   sha1sum "$2" | cut -f 1 -d " " | sed "s|^\\\\||" | grep -Eqi "$1"
' find-sh "$hash" {} \; -print

Dieser Code ist aus folgenden Gründen komplexer als Sie denken:

  • Es ist dafür gedacht, Dateinamen mit Leerzeichen, Zeilenumbrüchen, Backslashes, Anführungszeichen, Sonderzeichen usw. korrekt zu verarbeiten. (Ändern Sie es -printin , -print0um sie weiter zu analysieren.)
  • es ist beabsichtigt, Hashes als reguläre Ausdrücke zu akzeptieren (kompatibel mit grep -E) egrep,
    d. h. es '^00|00$'wird eine Übereinstimmung gefunden, wenn der Datei-Hash mit beginnt oder endet 00; ein praktischeres Beispiel ist die Suche nach vielen Hashes gleichzeitig: '74…|a9…|…|…|…'(Auslassungspunkte der Kürze halber, verwenden Sie vollständige Hashes).

*sumSie können andere Tools mit kompatibler Schnittstelle verwenden (z. B. md5sum).

Antwort2

Wenn Sie PowerShell v.4.0 oder höher haben, können Sie den folgenden Befehl verwenden:

Get-ChildItem _search_location_ -Recurse | Get-FileHash | 
Where-Object hash -eq (Get-FileHash _search_file_).hash | Select path

Dabei _search_location_ist der Ordner oder Datenträger, in dem Sie nach Duplikaten suchen möchten, und _search_file_eine Datei, die irgendwo ein Duplikat enthält. Sie können diesen Befehl in eine Schleife einfügen, um nach mehreren Dateien zu suchen, oder | Remove-Itemam Ende der Zeile hinzufügen, um Duplikate automatisch zu löschen.

Beachten Sie auch, dass dieser Befehl nur für kleine Suchordner geeignet ist. Er nimmt viel Zeit in Anspruch, wenn Ihr Suchort Tausende von Dateien enthält (z. B. eine ganze Festplatte).

Antwort3

Das ist eine spannende Frage. Ich habe ein Tool namens fdupes verwendet, um etwas Ähnliches zu erreichen. Fdupes durchsucht rekursiv Verzeichnisse und vergleicht jede Datei mit jeder anderen Datei. Zuerst vergleicht es die Größe, und wenn die Größen identisch sind, erstellt es Hashes der Dateien und vergleicht diese. Wenn die Hashes gleich sind, geht es tatsächlich jede Datei Byte für Byte durch und vergleicht sie.

Wenn es alle Dateien findet, die wirklich identisch sind, können Sie es verschiedene Dinge tun lassen. Ich lasse es das Duplikat löschen und an seiner Stelle einen Hardlink erstellen (und spare so Festplattenspeicher), aber Sie können es auch einfach die Speicherorte der Duplikatdateien ausgeben lassen und nichts damit machen. Dies ist das Szenario, nach dem Sie fragen.

Einige Nachteile von fdupes sind, dass es meines Wissens nur unter Linux läuft und dass es, da es jede Datei mit jeder anderen Datei vergleicht, ziemlich viel I/O und Zeit zum Ausführen benötigt. Es „sucht“ nicht direkt nach einer Datei, aber es listet alle Dateien auf, die einen identischen Hash haben.

Ich kann es nur wärmstens empfehlen und habe es so eingerichtet, dass es jeden Tag in einem Cron-Job ausgeführt wird, damit ich nie unnötige Duplikate meiner Daten habe (meine Backups sind hiervon natürlich ausgenommen).

Fdupes-Quellseite

Antwort4

Voidtools Alles 1.5 (Alpha)Das Suchtool für Windows verfügt über eine Option zum Hinzufügen einer Spalte mit verschiedenen Hashes, wie etwa CRC-32, CRC-64, MD5, SHA-1, SHA-256 für jede Datei.

Bildbeschreibung hier eingeben

Sie können dann auch nach einem bestimmten Hash suchen, zum Beispielmd5:71E.. Bildbeschreibung hier eingeben

verwandte Informationen