file est une commande permettant de connaître le type d'un fichier et qui se révèlera extrêmement pratique pour vérifier que le fichier que votre script attend est bien du bon type.

Il suffit tout simplement d'appeler file et de lui passer en argument le fichier. Le programme déterminera tout seul le type de fichier.

file fichier_musical.wav
... donnera :
fichier_musical.wav: RIFF (little-endian) data, WAVE audio, ITU G.711 A-law mono 8000 Hz

file fichier_photo.jpg
... donnera :
fichier_photo.jpg: JPEG image data, JFIF standard 1.01

Attention la détection ne se fait pas via une bête lecture de l'extension du fichier, la preuve si on renomme le fichier précédent :

file fichier_photo.txt
... donnera :
fichier_photo.txt: JPEG image data, JFIF standard 1.01

De même si le fichier ne comporte aucune extension :

file fichier_photo
... donnera :
fichier_photo: JPEG image data, JFIF standard 1.01

Attention toutefois on ne peut pas prendre cette information comme une référence exacte pour tous les fichiers de même type car file essaie par défaut de rapporter un maximum de détails. Exemple avec un autre fichier image :

file fichier_photo_2.jpg
... donnera :
fichier_photo_2.jpg: JPEG image data, JFIF standard 1.01, comment: "Created with The GIMP\377"

Pour avoir une donnée exacte et utilisable dans un script nous allons utiliser le type MIME avec l'option "-i" (au passage utilisons l'option "-b" pour ne pas avoir le nom du fichier répété à chaque fois)...

file -b -i fichier_photo_2.jpg
... donnera :
image/jpeg

Une petite liste de types MIME sur Wikipedia


Ainsi faire un script vérifiant que le fichier passé en argument est bien lisible et est un JPEG se fera de la manière suivante :

#! /bin/sh
if [ -f "$1" ] && [ "`file -b -i \"$1\"`" = "image/jpeg" ]; then

    echo "Votre fichier est lisible et il s'agit bel et bien d'un fichier JPEG"
fi


Alors n'hésitez pas à faire de même quelque soit le type de fichier : testez le d'abord avec file -b -i (sauf si vous connaissez son MIME-type) et utiliser le résultat pour comparer tous les fichiers du même type (pratique par exemple pour vérifier au préalable qu'un fichier à dézipper est bien un zip) !

... et surtout n'hésitez pas à tester tout cela en mode DEBUG avec l'astuce citée précédemment ici.

Tag(s) : #bash

Partager cet article

Repost 0
Pour être informé des derniers articles, inscrivez vous :