Sie können ein Skript schreiben, das aufruft file
, und mithilfe einer case-Anweisung prüfen, an welchen Fällen Sie interessiert sind.
Beispielsweise
#!/bin/sh
case $(file "$1") in
(*script*|*\ text|*\ text\ *)
echo text
;;
(*)
echo binary
;;
esac
Natürlich kann es viele Sonderfälle geben, die von Interesse sind. Wenn ich nur strings
eine Kopie von ansehe libmagic
, sehe ich ungefähr 200 Fälle, zB
Konqueror cookie text
Korn shell script text executable
LaTeX 2e document text
LaTeX document text
Linux Software Map entry text
Linux Software Map entry text (new format)
Linux kernel symbol map text
Lisp/Scheme program text
Lua script text executable
LyX document text
M3U playlist text
M4 macro processor script text
Einige verwenden die Zeichenfolge "Text" als Teil eines anderen Typs, z.
SoftQuad troff Context intermediate
SoftQuad troff Context intermediate for AT&T 495 laser printer
SoftQuad troff Context intermediate for HP LaserJet
script
könnte ebenfalls Teil eines Wortes sein, aber ich sehe in diesem Fall keine Probleme. Ein Skript sollte jedoch nach "text"
einem Wort suchen , nicht nach einer Teilzeichenfolge .
Zur Erinnerung, die file
Ausgabe verwendet keine genaue Beschreibung, die immer "Skript" oder "Text" enthalten würde. Sonderfälle sind zu berücksichtigen. Ein Follow-up kommentierte, dass der --mime-type
Ansatz zwar nicht funktioniert, für .svg
Dateien. In einem Test sehe ich jedoch die folgenden Ergebnisse für svg-Dateien:
$ ls -l *.svg
-r--r--r-- 1 tom users 6679 Jul 26 2012 pumpkin_48x48.svg
-r--r--r-- 1 tom users 17372 Jul 30 2012 sink_48x48.svg
-r--r--r-- 1 tom users 5929 Jul 25 2012 vile_48x48.svg
-r--r--r-- 1 tom users 3553 Jul 28 2012 vile-mini.svg
$ file *.svg
pumpkin_48x48.svg: SVG Scalable Vector Graphics image
sink_48x48.svg: SVG Scalable Vector Graphics image
vile-mini.svg: SVG Scalable Vector Graphics image
vile_48x48.svg: SVG Scalable Vector Graphics image
$ file --mime-type *.svg
pumpkin_48x48.svg: image/svg+xml
sink_48x48.svg: image/svg+xml
vile-mini.svg: image/svg+xml
vile_48x48.svg: image/svg+xml
Die ich nach dem Betrachten von tausend Dateien ausgewählt habe, zeigen nur 6 mit "Text" in der MIME-Typ-Ausgabe. Argumentieren, am Ende der MIME-Typ Ausgabe nützlicher sein könnte , die „xml“ passend, sagt, als matching „SVG“, aber mit einem Skript zu tun , dass bringen Sie zurück auf den Vorschlag hier gemacht.
Die Ausgabe von file
erfordert einige Anpassungen in beiden Szenarien und ist nicht 100% zuverlässig (es wird von mehreren meiner Perl-Skripten verwirrt und nennt sie "Daten").
Es gibt mehr als eine Implementierung von file
. Das am häufigsten verwendete erledigt seine Arbeit in libmagic
, das von verschiedenen Programmen aus verwendet werden kann (vielleicht nicht direkt von zsh
, obwohl python
kann).
Gemäß der Vergleichstabelle für Dateitests für Shell, Perl, Ruby und Python verfügt Perl über eine -T
Option, mit der diese Informationen bereitgestellt werden können. Es listet aber keine vergleichbare Funktion für zsh
.
Weitere Lektüre:
file
ist ein Standard-Dienstprogramm und kann die Dateimagie nach besten Kräften durchlaufen, um Dateitypen zu bestimmen. Es kann die meisten Textformate erkennen und leistet bei Binärformaten ziemlich gute Arbeit. Wenn Sie nur herausfinden