Vous pouvez écrire un script qui appelle file
et utiliser une instruction case pour vérifier les cas qui vous intéressent.
Par exemple
#!/bin/sh
case $(file "$1") in
(*script*|*\ text|*\ text\ *)
echo text
;;
(*)
echo binary
;;
esac
bien sûr, il peut y avoir de nombreux cas particuliers qui présentent un intérêt. En vérifiant strings
une copie de libmagic
, je vois environ 200 cas, par exemple,
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
Certains utilisent la chaîne "text" dans le cadre d’un type différent, par exemple,
SoftQuad troff Context intermediate
SoftQuad troff Context intermediate for AT&T 495 laser printer
SoftQuad troff Context intermediate for HP LaserJet
de même script
pourrait faire partie d'un mot, mais je ne vois pas de problèmes dans ce cas. Mais un script doit rechercher "text"
un mot , pas une sous - chaîne .
Pour rappel, la file
sortie n'utilise pas de description précise qui aurait toujours un "script" ou un "texte". Les cas spéciaux sont quelque chose à considérer. Un suivi a commenté que les --mime-type
travaux fonctionnent alors que cette approche ne fonctionnerait pas, pour les .svg
fichiers. Cependant, dans un test, je vois ces résultats pour les fichiers 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
que j’ai sélectionné après avoir vu un millier de fichiers ne montrer que 6 avec "texte" dans la sortie de type mime. Faire correspondre le "xml" à la fin de la sortie de type mime pourrait être plus utile, par exemple, que faire correspondre le "SVG", mais utiliser un script pour le faire vous ramène à la suggestion faite ici.
La sortie de file
nécessite un peu d'ajustage dans les deux cas de figure et n'est pas fiable à 100% (plusieurs de mes scripts Perl le confondent et l'appellent "données").
Il y a plus d'une implémentation de file
. Celui qui est le plus couramment utilisé fait son travail libmagic
, qui peut être utilisé à partir de différents programmes (peut-être pas directement à partir de zsh
, bien que python
possible).
Selon le tableau de comparaison des tests de fichiers pour shell, Perl, Ruby et Python , Perl dispose d’une -T
option qu’il peut utiliser pour fournir ces informations. Mais il ne contient aucune caractéristique comparable pour zsh
.
Lectures complémentaires:
file
est un utilitaire standard et peut utiliser la magie de fichier pour déterminer au mieux ses types de fichier. Il peut dire la plupart des formats de texte et fait un travail assez décent sur les formats binaires. Si tout ce que vous essayez, c'est de savoir si un fichier