Ich muss eine Liste aller Dateierweiterungen von Binärdateien erstellen, die sich in einer Verzeichnisstruktur befinden.
Die Hauptfrage müsste sein, wie man eine Textdatei von einer binären unterscheidet, und der Rest sollte Kuchen sein.
BEARBEITEN : Das ist das, was mir am nächsten kommt, bessere Ideen?
%Vor%Hier ist ein Trick, um die Binärdateien zu finden:
%Vor%Das -m 1 macht grep nicht alle Dateien zu lesen.
Dieser perlige Einzeiler hat für mich funktioniert, es war auch ziemlich schnell:
%Vor%und so können Sie alle Binärdateien im aktuellen Ordner finden:
%Vor%-T ist ein Test für Textdateien und -B für Binärdateien, und sie sind Gegensätze *.
Es gibt keinen Unterschied zwischen einer Binärdatei und einer Textdatei unter Linux. Das Dienstprogramm file
betrachtet den Inhalt und die Vermutungen. Leider ist es nicht sehr hilfreich, weil file
keine einfache "Binär- oder Textantwort" liefert; Es hat eine komplexe Ausgabe mit einer großen Anzahl von Fällen, die Sie analysieren müssten.
Ein Ansatz besteht darin, ein Präfix mit fester Größe einer Datei, wie beispielsweise 256 Bytes, zu lesen und dann einige Heuristiken anzuwenden. Sind zum Beispiel alle Byte-Werte 0x0 bis 0x7F, so dass Steuercodes mit Ausnahme von gewöhnlichen Leerzeichen vermieden werden? Das schlägt ASCII vor? Wenn es Bytes 0x80 bis 0xFF gibt, decodiert der gesamte Puffer (bis auf einen Code am Ende, der gechoppt werden kann) als gültiges UTF-8? Etc.
Eine Idee könnte sein, Utilities, die Binärdateien erkennen, wie GNU diff
, schleichend auszunutzen.
Ohne Prozesssubstitution funktioniert immer noch:
%Vor% Jetzt grep nur die Ausgabe von und suchen Sie nach dem Wort Binary
.
Die Frage ist, ob die Heuristik von diff
für Binärdateien für Ihre Zwecke funktioniert.
Hier ist ein einfacher Befehl, um alle Binärdateien (bestehend aus NULL-Zeichen ) mit GNU grep
:
Um die Dateiendung kürzer als 5 Zeichen zu drucken, können Sie awk
verwenden und dann die Duplikate herausfiltern, indem Sie entweder uniq
oder sort
verwenden.
Also sollten alle zusammen etwas wie:
sein %Vor%Tags und Links linux bash filesystems