Bash 使用linux';文件';用于确定类型(即图像、音频或视频)的命令

Bash 使用linux';文件';用于确定类型(即图像、音频或视频)的命令,bash,shell,file-type,Bash,Shell,File Type,这里的单词file指的是shell命令,而不是实际的文件。我想确定文件是否是视频文件(.mpg,.mkv,.avi)文件对于图像文件非常擅长返回图像,对于视频文件非常擅长返回视频,对于音频文件非常擅长返回音频(对于文本,出于某种原因,应用程序/x-empty)。我的问题是,这对于识别类型有多可靠。如果我做一个简单的 file -ib deliverance.avi | grep video 这是否适用于所有概述的主视频文件?文件通过引用文件头与“幻数”文件来工作。我认为查看文件是否健壮的最好方

这里的单词
file
指的是shell命令,而不是实际的文件。我想确定文件是否是视频文件(
.mpg
.mkv
.avi
)<代码>文件对于图像文件非常擅长返回
图像
,对于视频文件非常擅长返回
视频
,对于音频文件非常擅长返回
音频
(对于文本,出于某种原因,
应用程序/x-empty
)。我的问题是,这对于识别类型有多可靠。如果我做一个简单的

file -ib deliverance.avi | grep video

这是否适用于所有概述的视频文件?

文件通过引用文件头与“幻数”文件来工作。我认为查看文件是否健壮的最好方法是检查您的本地幻码文件(可能是/usr/share/magic,但有关详细信息,请参阅man文件),以查看您参考列表中的文件类型。

似乎它适用于大多数视频/音频/图像文件。但是,如果没有,则实际上有一个文件包含扩展名与其类型之间的关系:

识别这些文件的信息从编译的magic文件/usr/share/magic.mgc读取,如果编译文件不存在,则从/usr/share/magic读取

见:


希望这有帮助

文件
得到的结果并不完美,而且某些类型的文件比其他类型的文件存在更多问题。文件基本上只是以可预测的模式查找特定的二进制数据片段,以确定文件类型

不幸的是,尤其是一些经常用于视频的文件类型属于这种“有问题”的类别。较新的容器格式,如
.mp4
.mkv
通常有几种不同的MIME类型,这些类型应适当地取决于所包含的数据类型。例如,
.mp4
可以根据内容正确地识别为
视频/mp4
音频/mp4
、或
应用程序/mp4

实际上,
文件
经常会做出一些猜测,这些猜测仅仅符合常见用法,它可能会非常适合您。例如,虽然我提到了正确识别Matroska文件的一些理论困难,
file
基本上只是假设任何Matroska文件都是视频。另一方面,Ogg容器的使用在音频和视频之间更为平均,我相信当前版本的
文件
只是将差异分割开来,并将Ogg文件标识为
应用程序/Ogg
,这不属于您的任何类别


有一件事我可以肯定地说,你想要的是你能得到的最新版本的
文件。包含要匹配的模式和匹配产生的MIME类型的“魔法”文件会经常更新,以包括像WebM这样的较新文件类型,或者只是为了提高较旧类型的准确性。

您能否提供一些建议/链接,以使其更准确?在我脑子里,也许在检查文件扩展名,使用。当然,像youtube这样的网站也面临同样的问题。谢谢,我不是故意说负面的<代码>文件
可能与您将获得的一样好。如果您想确保某些扩展以某种方式被检测到(或者为了解决您在实践中遇到的问题),也可以对照扩展进行检查。当然,要获得25000个不同视频文件的可靠样本并不容易。你知道大型网站是如何处理这个问题的吗?也许让mplayer试着玩它。这是不正确的。file命令不查看“以可预测模式显示文件类型的特定二进制数据段”。它查看文件的前几个字符,在unix land中,这些字符决定文件类型。它也被称为文件幻数。然后在表中查找神奇数字表。下面弗兰克的答案是正确的