を呼び出すスクリプトをfile
記述し、ケースステートメントを使用して、関心のあるケースを確認できます。
例えば
#!/bin/sh
case $(file "$1") in
(*script*|*\ text|*\ text\ *)
echo text
;;
(*)
echo binary
;;
esac
もちろん、興味のある多くの特別なケースがあるかもしれません。のstrings
コピーを確認するだけでlibmagic
、約200件のケースが表示されます。たとえば、
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
文字列「テキスト」を異なるタイプの一部として使用するものもあります。たとえば、
SoftQuad troff Context intermediate
SoftQuad troff Context intermediate for AT&T 495 laser printer
SoftQuad troff Context intermediate for HP LaserJet
同様にscript
単語の一部である可能性がありますが、この場合は問題ありません。ただし、スクリプトは部分文字列ではなく単語"text"
としてチェックする必要があります。
念のため、file
出力では、常に「スクリプト」または「テキスト」を持つ正確な説明は使用されません。特別なケースは考慮すべきものです。フォローアップは、--mime-type
このアプローチは.svg
ファイルに対しては機能しますが機能しないとコメントしました。ただし、テストでは、svgファイルの次の結果が表示されます。
$ 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
mime-type出力で「テキスト」を含む6つのファイルのみが表示されているのを確認してから選択しました。おそらく、MIMEタイプの出力の最後にある「xml」を一致させることは、「SVG」を一致させるよりも便利かもしれませんが、スクリプトを使用すると、ここでの提案に戻ります。
の出力はfile
、いずれかのシナリオで調整が必要であり、100%の信頼性はありません(Perlスクリプトのいくつかによって混同され、それらを「データ」と呼んでいます)。
の実装は複数ありfile
ます。最も一般的に使用されるものは、で動作しlibmagic
ます。異なるプログラムから使用できます(可能zsh
ですpython
が、直接は使用できません)。
シェル、Perl、Ruby、およびPythonのファイルテスト比較表によると、Perlには-T
この情報を提供するために使用できるオプションがあります。ただし、に匹敵する機能はリストされていませんzsh
。
参考文献:
file
は、標準のユーティリティであり、ファイルマジックを実行して、ファイルの種類をその能力を最大限に引き出すことができます。ほとんどのテキスト形式を伝えることができ、バイナリ形式でかなりまともな仕事をします。ファイルがテキストであるかどうかを確認するだけなら、それがあなたの興味のあるコマンドです