Suchen Sie rekursiv und löschen Sie Dateien, die mit Hex 00 00 FF FF beginnen, in Windows oder Linux

Suchen Sie rekursiv und löschen Sie Dateien, die mit Hex 00 00 FF FF beginnen, in Windows oder Linux

Zielsetzung:

Durchsucht einen Ordner und alle Unterordner nach Dateien (Beispiel: *.dat), die auf den ersten 4 Bytes mit der Hex-Sequenz 00 00 FF FF beginnen, und löscht alle passenden Dateien, ohne bei jedem Löschen einer Datei eine Bestätigung abzufragen.

Zum Beispiel:

Unter Linux dachte ich an eine Kombination aus grep + find + hexdump + rm

Zum Beispiel:

rm -r löscht übereinstimmende Dateien rekursiv

hexdump -n4 *.dat, um die ersten 4 Bytes der Datei zu extrahieren

grep '\x00\x00\xFF\xFF' *.dat, um Dateien zu finden, die dem zurückgegebenen Hexdump 00 00 FF FF entsprechen

--WICHTIG-- Überprüfen Sie, ob nur in den allerersten 4 Bytes Hex 00 00 FF FF steht!

Es spielt keine Rolle, ob 00 00 FF FF irgendwo sonst in der Datei steht oder nicht! (es müssen nur die ersten 4 Bytes überprüft werden)

Denken Sie auch daran, dass alle *.dat-Dateien im aktuellen Ordner und allen Unterordnern gescannt werden müssen.

Und 00 00 FF FF muss in genau dieser Reihenfolge sein

Beste Lösung, wenn dies unter Windows möglich wäre (auch wenn Dienstprogramme von Drittanbietern erforderlich wären). Wäre aber froh über eine Lösung, die unter Linux läuft

Ich habe den folgenden Befehl ausprobiert, aber er gibt nichts zurück und ich bin sicher, dass es *.dat-Dateien gibt, die mit 0000FFFF beginnen

rm -r | grep '\x00\x00\xFF\xFF' | hexdump -n4 *.dat

Ich kann nicht herausfinden, wie ich alle erforderlichen Befehle weiterleite.

Irgendwelche Ideen, wie das geht?

Dank im Voraus!

Antwort1

Etwas wie das:

find . -type f -exec bash -c 'hexdump -n4 $1 | grep -q "^0000000 0000 ffff"' Anything {} \; -delete;

In Zeitlupe:

  • find . -type fdurchsucht alle einfachen Dateien im aktuellen Verzeichnis
  • Für jede dieser Dateien wird der einzeilige Bash-Befehl ausgeführt hexdump -n4 $1 | grep -q "^0000000 0000 ffff", der 0 zurückgibt, wenn die Datei mit beginnt00 00 FF FF
  • findspringt zur nächsten Datei, wenn der mit gestartete Befehl -execnicht mit rc=0 zurückkehrt, andernfalls fährt es mit der Ausführung von Filtern oder Aktionen gegenüber dieser Datei fort, wobei die nächste -deletenur ausgeführt wird, wenn der vorherige Filter nicht fehlgeschlagen ist.

Sie können die Technik hiermit ausprobieren, ohne Dateien zu löschen und stattdessen deren Namen anzuzeigen:

find . -type f -exec bash -c 'hexdump -n4 $1 | grep -q "^0000000 0000 ffff"' Anything {} \; -exec printf "Would delete: %s\n" {} \;

verwandte Informationen