J'ai une list de files et j'ai besoin de find tous les files d' image de cette list.
Par exemple, si ma list contient ce qui suit:
pidgin.tar.gz photo01.jpg picture01 screenshot.gif invoice.pdf
Ensuite, je voudrais seulement sélectionner:
photo01.jpg picture01 screenshot.gif
Remarques:
feh
ne peut pas le montrer, ce n'est pas une image) La command suivante répertorie les lignes dans list_file
contenant le nom d'un file image:
<list_file xargs -d \\n file -i | sed -n 's!: *image/[^ :]*$!!p'
file -i FOO
regarde les premiers octets de FOO
pour déterminer son format et imprime une ligne comme FOO: image/jpeg
( -i
signifie montrer un type MIME, c'est spécifique au file GNU trouvé sur Linux). xargs -d \\n
lit une list de files (un par ligne) de l'input standard et y applique la command suivante. (Cela nécessite GNU xargs comme sur Linux, sur d'autres systèmes, laissez -d \\n
, mais la list des files ne peut pas contenir \'"
ou les espaces blancs). sed
filter le suffixe : image/FOO
afin d'afficher simplement les noms de files. Il ignore les lignes qui ne correspondent pas aux files image. file -ib image | awk '"^image/" {print}'
Si le file détecte une image, il devrait imprimer la ligne comme suit:
image/jpeg; charset=binary
Cela fonctionne sur les nombres magiques donc il n'est pas basé sur des extensions. Il
En plus de la command file
, vous pouvez également utiliser ImageMagick. Le text suivant montre le type de tous les files du directory courant:
find -type f -depth 0 -print0 | xargs -0 identify
La command identify
imprimera quelque chose comme ceci pour différents types de files:
text.txt[8] TXT 612x792 612x792+0+0 16-bit DirectClass 694B 0.320u 0:00.330 php.jpg[31] JPEG 1280x1024 1280x1024+0+0 8-bit DirectClass 195KB 0.000u 0:00.000
Les files GIF animés imprimeront plus d'informations (il s'agit d'un file GIF à 21 images):
adhd.gif[0] GIF 211x200 211x200+0+0 8-bit PseudoClass 256c 233KB 0.000u 0:00.029 adhd.gif[1] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.029 adhd.gif[2] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.029 ... adhd.gif[18] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.000 adhd.gif[19] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.000 adhd.gif[20] GIF 168x130 211x200+22+22 8-bit PseudoClass 256c 233KB 0.000u 0:00.000
Vous pouvez ensuite utiliser awk
ou des outils similaires pour décider quoi faire avec eux.
Si vous avez Python et python-magie . Par exemple
#!/usr/bin/env python import magic import os path=sys.argv[1] mime = magic.open(magic.MAGIC_NONE) mime.load() for r,d,f in os.walk(path): for files in f: filename=os.path.join(r,files) filetype=mime.file(filename) if "image" in filetype: print "File: %s is %s" %(filename, filetype)
Peut-être qu'il y a quelque chose qui me manque, mais cela semble fonctionner pour moi:
file -i * | grep "image/" | cut -d: -f1