您可以编写调用的脚本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
有些人将字符串“ 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-type输出末尾的“ xml”可能比匹配“ SVG”更有用,但是使用脚本来完成操作会使您回到此处提出的建议。
file
在这两种情况下,的输出都需要进行一些调整,并且并非100%可靠(我的几个Perl脚本将其混淆,称它们为“数据”)。
的实现不止一个file
。最常用的一种在中工作libmagic
,可以在不同的程序中使用(也许不能直接从zsh
,但python
可以)。
根据Shell,Perl,Ruby和Python的文件测试比较表,Perl有一个-T
选项,可以用来提供此信息。但是它没有列出与之类似的功能zsh
。
进一步阅读:
file
是一个标准实用程序,可以运行文件魔术来尽其所能确定文件类型。它可以分辨大多数文本格式,并且在二进制格式上做得相当不错。如果您要做的只是找出文件是否为文本,这就是您感兴趣的命令