kobal Posté(e) le 25 août 2009 Partager Posté(e) le 25 août 2009 Bonjour à tous, Je suis en train de me faire un petit script pour remettre à jour les champs de date de création dans les informations exif d'une photo (j'avais oublier de remettre à jour la date qui est restée par défaut - super pour les tris...), en utilisant exiftool (http://www.sno.phy.queensu.ca/~phil/exiftool/). Le problème supplémentaire, c'est que certains tags exif sont corrompus sur certains fichiers (jesépapourkoi), et dans ce cas les mises à jour des champs sont pas possibles. Du coup il faut ruser en supprimant tous les tags, puis recopier l'ensemble des tags (ceux qui sont corrompus sont ignorés) à partir du fichier original pour enfin renseigner le champs désiré. Vu que j'ai plus de 1000 photos à corriger, je me suis dis qu'un peu d'automatisation ne ferait pas de mal. Le principe du script : 1. création d'une copie de la photo 2. suppression de tous les tags 3. copie des tags 4. mise à jour de la date (passée en paramètre au bon format, pas de vérification) 5. suppression des fichiers de sauvegardes, des fichiers originaux et renommage du fichier temporaire en fichier original Voici la bête : #!/bin/sh #FILELIST=`ls` #echo $FILELIST DATE=$1 echo "Etape 1 : Copie des fichiers défectueux" for i in `ls` do name=$i"CPY" cp $i $name done echo "Etape 2 : Mise a jour des tags exif" for j in `ls` do if expr "$j" : ".*CPY" then eval "exiftool -exif:all= $j" eval "exiftool -tagsfromfile ${j/CPY/} -all:all $j" eval "exiftool -AllDates=$DATE $j" fi done echo "Etape : Nettoyage des fichiers temporaires" `rm *original` echo "Etape : Suppression des fichiers corrompus" for k in `ls` do if expr "$k" : ".*JPG$"; then rm $k fi done echo "Etape : Restauration des fichiers de travail" for l in `ls` do mv $l ${l/CPY/} done Le script à l'air de faire ce que je veux sauf sur un point - cosmétique - : if expr "$k" : ".*JPG$"; then Le résultat du expr apparaît dans la console, ce qui met pleins de 0/15/0/15 dans la console, ce qui est très moche. D'où ma question : comment supprimer l'affichage de l'évaluation de expr en bash ? Merci d'avance ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 25 août 2009 Partager Posté(e) le 25 août 2009 Hm, il y a pas mal de choses à modifier : for i in `ls` À remplacer par for i in * Mais ça serait encore mieux avec des variables qui veulent dire quelque chose. Les eval sont à supprimer. Ça ne sert à rien ici. De même, ça ne sert à rien de lancer des sous shells : `rm *original` devrait être remplacé par rm *original Sinon pour supprimer l'affichage, il faut utiliser >/dev/null. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.