这里的file
一词是指shell file命令,而不是实际文件。我想确定文件是否是例如视频文件(.mpg
,.mkv
,.avi
)。 file
非常适合返回image
用于图像文件,video
用于视频文件,audio
用于音频文件(以及application/x-empty
由于某种原因用于文本) 。我的问题是这对识别类型有多可靠。如果我做了一个简单的
file -ib deliverance.avi | grep video
是否适用于here概述的所有主要视频文件?
答案 0 :(得分:10)
file
的结果并不完美,某些类型的文件比其他文件有更多问题。文件基本上只是以可预测的模式查找特定的二进制数据片段以找出文件类型。
不幸的是,特别是,一些经常用于视频的文件类型属于这个“有问题”的类别。较新的容器格式(如.mp4
和.mkv
)通常有几种不同的MIME类型,这些MIME类型应该正确地取决于所包含的数据类型。例如,.mp4
可以正确地标识为video/mp4
,audio/mp4
或application/mp4
,具体取决于内容。
在实践中,file
经常做出符合常规用法的猜测,并且它可能非常适合您。例如,虽然我提到了正确识别Matroska文件的一些理论上的困难,file
基本上只是假设任何Matroska文件都是视频。另一方面,Ogg容器的使用在音频和视频之间更均匀地分配,我相信当前版本的file
只是将差异分开,并将Ogg文件识别为application/ogg
,这不会不属于任何类别。
我可以肯定地说,你想要获得最新版本的file
,你可以亲自动手。包含要匹配的模式和匹配产生的MIME类型的“魔术”文件会经常更新,以包含较新的文件类型(如WebM),或者只是为了提高旧类型的准确性。
答案 1 :(得分:1)
文件的工作原理是引用文件的标题与“幻数”文件。我怀疑最好的方法是查看文件是多么强大,以检查您的本地幻数文件(可能是/ usr / share / magic,但请参阅man文件以获取详细信息),以获取引用列表中的文件类型。
答案 2 :(得分:1)
它似乎适用于大多数视频/音频/图像文件。但是,如果没有,实际上有一个文件包含扩展名和它的类型之间的关系:
如果编译文件不存在,则从编译的魔术文件/usr/share/magic.mgc或/ usr / share / magic中读取标识这些文件的信息。
请参阅: http://linux.about.com/library/cmd/blcmdl1_file.htm
希望这有帮助!