Sie können keine Möglichkeit finden, nach Dateien zu suchen, die 100 % NULL-Werte enthalten?

Sie können keine Möglichkeit finden, nach Dateien zu suchen, die 100 % NULL-Werte enthalten?

Ich habe meinen Desktop-Ordner verloren (ich hatte dort eine Menge Zeug, vielleicht 1000 Dateien). Und habe sofort ein Tool verwendet, um die gelöschten Dateien wiederherzustellen. Es hat alle gelöschten Dateien gefunden und wiederhergestellt. Sie sahen alle in Ordnung aus, was Datum und Größe usw. angeht. Also habe ich sie zurück in meinen Desktop-Ordner kopiert, nur um herauszufinden, dass jede einzelne 100 % NUL darin war. Ich glaube nicht einmal, dass sie Wagenrückläufe enthalten. Nur eine lange Zeichenfolge mit Nullen. Die Dateien haben jedoch die richtige Größe. Also...

Zum Glück hatte ich ein altes Backup von vor 1,5 Monaten und konnte etwa 80 % der Dateien wiederherstellen.

Aber jetzt habe ich 20 % der Dateien voller NULL-Werte, die über den gesamten Desktop und in den Ordnern auf dem Desktop verstreut sind.

Ich kenne kein Python und kann kein Tool finden, um diese Dateien zu identifizieren. Es kommt mir verrückt vor, dass es kein Tool gibt, das eine Datei finden kann, die zu 100 % aus NUL 00-Zeichen besteht??? Ich bin jetzt 61 und im Ruhestand, aber ich war Softwareentwickler und möchte keine Sprache lernen, nur um das zu tun. Dies scheint eine Gelegenheit für jemanden zu sein, ein Tool zu erstellen, das er teilen kann. Ich habe grepWin mit Regex-Suchen ausprobiert und überall gesucht, aber ich habe viele Leute gefunden, die dasselbe versucht haben und gescheitert sind.

Ich habe einige Beispiel-NUL-Dateien zum Testen. Ich sehe keine Möglichkeit, sie hier hochzuladen.

Antwort1

Danke, Paul. Aus irgendeinem Grund kann ich Ihre Antwort nicht kommentieren. Dort steht, dass ich „50 Reputationspunkte haben muss, um kommentieren zu können“. Vielleicht, weil meine Frage aus den Unix-Foren migriert wurde? Keine Ahnung...

Ist Ihre Antwort ein Grep-Befehl? Wenn ja, brauche ich auch eine grundlegende Anleitung dazu. Ich habe gesucht und gesucht und habe grepWin ausprobiert (mit dem ich keine 100 % Nulldateien finden kann), und grep3.4 heruntergeladen (aber keine Befehle funktionieren? Vielleicht muss ein Systempfad eingerichtet werden?, keine Ahnung), und GnuWin gefunden (was ich nicht für das halte, was ich will, da es anscheinend nur für 32-Bit-Systeme ist und ich Win 10 64 verwende)... Ich habe auch nach Tutorials für Anfänger gesucht, aber in keinem wurde gezeigt, wie man Grep einfach so einrichtet, dass es funktioniert... Sie beginnen alle mit der Anzeige grundlegender Befehle...

Nochmals vielen Dank für Ihre Antwort. Ich möchte nicht lästig sein. Ich bin für jede Hilfe sehr dankbar, da ich jetzt schon seit ungefähr 5 Tagen versuche, das herauszufinden und mich mittlerweile ziemlich dumm fühle.

Antwort2

Entschuldigen Sie die Verzögerung – ich habe keine Benachrichtigung zu Ihrer Antwort erhalten, da ich als Gast kommentiert habe.

Dies ist ein getestetes Skript, das möglicherweise ein wenig angepasst werden muss.

#! /bin/bash

    find 2>/dev/null . -type f -size +0c | while IFS= read -r fn; do
        NN="$( head --bytes=128 "${fn}" | tr -d '\0' | wc -c )"
        (( NN > 0 )) && continue

        NN="$( tr -d '\0' < "${fn}" | wc -c )"
        (( NN > 0 )) && continue

        printf "rm -f '%s'\n" "${fn}"
    done

So wie es geschrieben ist, erstellt es eine Liste von Befehlen, um alle Dateien in einem Verzeichnisbaum zu entfernen, die vollständig aus NUL-Zeichen bestehen. Sie können diese Liste in eine Datei umleiten, um sie zu überprüfen, und dann einfach . Oder Sie können einfach direkt nach done bash < myRmFileeinfügen .| bash

Die äußere Schleife find ...; do ... donedurchsucht das Verzeichnis rekursiv, von dem aus sie ausgeführt wird. Die Suchoptionen wählen nur reguläre Dateien mit einer Größe von mindestens einem Byte aus, und dann lesen wir die Namen einzeln in die Variable fn ein.

Die nächsten beiden Zeilen sind ein Vorabprüfungsoptimierer, der das Lesen der gesamten Datei erspart. Er prüft nur die ersten 128 Bytes, da keine anständige Datei 128 NUL-Bytes und dann später noch etwas anderes enthält.

Also weisen wir NN eine Anzahl aus einer Pipeline von drei Befehlen zu. Der headwählt die ersten 128 Bytes aus, der trlöscht alle NULs und der wc -czählt, was übrig bleibt. Wenn noch Nicht-NUL-Bytes übrig sind, fahren wir mit dem nächsten Dateinamen fort.

Die nächsten beiden Zeilen machen dasselbe, allerdings für die gesamte Datei, für den Fall, dass wir auf eine „nicht anständige“ Datei stoßen.

Alles, was diese beiden Prüfungen nicht besteht, generiert eine RM-Anweisung für diese Datei.

Dies ist bei einigen extremen Dateinamen – solchen, die einfache Anführungszeichen oder Zeilenumbrüche im Namen enthalten – etwas unzuverlässig. Außerdem wird pro Datei ein RM-Prozess ausgeführt, aber Sie scheinen nur etwa 200 zu haben, also ist das nicht kritisch.

Bei Problemen bitte noch einmal posten.

verwandte Informationen