Utiliser la commande 'file' de linux pour déterminer le type (i.e. image, audio ou vidéo)
Le mot file
se réfère ici au shell le fichier commande, et pas des fichiers réels. Je veux déterminer si un fichier est un, par exemple, le fichier vidéo (.mpg
, .mkv
,.avi
). file
est très bon à retourner image
pour les fichiers image, video
pour les fichiers vidéo, et audio
pour les fichiers audio (et application/x-empty
pour une raison pour le texte). Ma question Est de savoir dans quelle mesure cela est fiable pour identifier les types. Si je fait un simple
file -ib deliverance.avi | grep video
ça marche pour tous main fichiers vidéo décrites ici<!--12?
3 réponses
Les résultats de file
sont moins que parfait, et il a plus de problèmes avec certains types de fichiers que d'autres. Fichier cherche simplement des morceaux particuliers de données binaires dans des modèles prévisibles pour comprendre les types de fichiers.
.mkv
ont généralement plusieurs types de MIME différents qui devraient correctement dépendre de ce type de données est contenue. Par exemple, un .mp4
pourrait être correctement identifié comme video/mp4
,audio/mp4
, ou application/mp4
selon le contenu.
Dans la pratique, file
fait souvent des suppositions qui se conforment simplement à l'usage courant, et il peut fonctionner parfaitement pour vous. Par exemple, bien que j'aie mentionné certaines difficultés théoriques à identifier correctement les fichiers Matroska,file
fondamentalement suppose juste que n'importe quel dossier Matroska est une vidéo. D'autre part, l'utilisation de la OGG container est plus également divisé entre l'audio et la vidéo, et je crois que la version actuelle de file
divise simplement la différence, et identifie les fichiers Ogg comme application/ogg
, qui n'entrerait dans aucune de vos catégories.
la seule chose que je peux dire avec certitude est que vous voulez la version la plus à jour de file
vous pouvez mettre la main dessus. Les fichiers "magiques" qui contiennent les motifs à comparer et les types MIME qui résulteront d'une correspondance sont mis à jour de façon équitable. souvent pour inclure de nouveaux types de fichiers comme WebM, ou tout simplement pour améliorer la précision pour les types plus anciens.
file fonctionne en référençant l'en-tête du fichier par rapport à un fichier "magic number". Je soupçonne que la meilleure façon de voir comment le fichier robuste est de vérifier votre fichier magic numéro local (éventuellement /usr/share/magic mais voir le fichier man pour les détails) pour les types de fichiers de votre liste référencée.
il semble que cela devrait fonctionner pour la plupart des fichiers vidéo/audio/image. Mais, si ce n'est pas le cas, il y a en fait un fichier qui contient les relations entre une extension et son type:
l'information identifiant ces fichiers est lue à partir du fichier magic compilé /usr/share/magic.mgc, ou /usr/share / magic si le fichier de compilation n'existe pas.
voir: http://linux.about.com/library/cmd/blcmdl1_file.htm
espérons que ceci aide!