Detecter des images foireuses
Lorsque l'on doit retrouver dans une arborescence toutes les images jpeg,gif ou png qui n'en sont pas, parce que une "bonne âme" a fait une malencontreuse "erreur" lors d'un transfert de fichiers qui c'est mal passé et que la "bonne âme" en question n'a pas pris la peine de tester son boulot...
Enfin bref je veux donc détecter toutes les images qui n'en sont pas.
Première étape, détecter tous les fichiers qui finissent par gif,png et jpg :
Cette commande va me trouver tous les fichiers qui possèdent un nom qui va se terminer par un .png ou un .gi ou encore un .jpg.
Ok on a la liste de toutes les images reste à trier le bon grain de l'ivraie pour cela je vais utiliser la commande identify du superbe Imagemagick Cet outil très puissant permet entre autre de traiter des images en ligne de commande et il se trouve qu'avec identify on va laisser imagemagick détecter s'il s'agit d'une image. Si l'image n'en est pas une on aura une erreur et on pourra se concentrer sur ces fichiers images corrompus. En gros ça donne :
Et voila ! on utilise xargs pour transmettre le résultats de la commande précédente (le find) comme argument à la commande identify, puis avec la redirection de STDERR ( 2> ) on récolte toutes les erreurs dans un fichier pour traitement.
Enfin bref je veux donc détecter toutes les images qui n'en sont pas.
Première étape, détecter tous les fichiers qui finissent par gif,png et jpg :
find mydirectory/ -regextype egrep -iregex '.+\.(png|gif|jpg)'
Cette commande va me trouver tous les fichiers qui possèdent un nom qui va se terminer par un .png ou un .gi ou encore un .jpg.
Ok on a la liste de toutes les images reste à trier le bon grain de l'ivraie pour cela je vais utiliser la commande identify du superbe Imagemagick Cet outil très puissant permet entre autre de traiter des images en ligne de commande et il se trouve qu'avec identify on va laisser imagemagick détecter s'il s'agit d'une image. Si l'image n'en est pas une on aura une erreur et on pourra se concentrer sur ces fichiers images corrompus. En gros ça donne :
find mydirectory/ -regextype egrep -iregex '.+\.(png|gif|jpg)'|xargs identify 2>erreurs_images.txt
Et voila ! on utilise xargs pour transmettre le résultats de la commande précédente (le find) comme argument à la commande identify, puis avec la redirection de STDERR ( 2> ) on récolte toutes les erreurs dans un fichier pour traitement.
Commentaires
Bonne Journée