Wie listet man alle Dateierweiterungen in einer Verzeichnisstruktur auf?

8

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%     
dukeofgaming 21.03.2012, 21:27
quelle

6 Antworten

11

Hier ist ein Trick, um die Binärdateien zu finden:

%Vor%

Das -m 1 macht grep nicht alle Dateien zu lesen.

    
Eran Ben-Natan 22.03.2012, 08:32
quelle
4

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 *.

* perl-Datei testet doc

    
Bijou Trouvaille 22.12.2012 07:14
quelle
2

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.

%Vor%

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.

    
Kaz 21.03.2012 21:40
quelle
1

Es gibt keine sichere Möglichkeit, eine "Text" -Datei von einer "Binär" -Datei zu unterscheiden, es ist raten zu arbeiten.

%Vor%     
pizza 22.03.2012 00:17
quelle
0

Hier ist ein Einzeiler in Python, um zu überprüfen, ob die Datei binär ist:

%Vor%

Finde es rekursiv in der Shell, siehe folgendes Beispiel:

%Vor%

Um alle nicht binären Dateien zu finden, ändern Sie && in || .

    
kenorb 01.06.2015 21:23
quelle
0

Hier ist ein einfacher Befehl, um alle Binärdateien (bestehend aus NULL-Zeichen ) mit GNU grep :

%Vor%

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%     
kenorb 01.06.2015 22:26
quelle

Tags und Links