2010-08-19 13 views
1

Je souhaite être en mesure de spécifier à la fois l'emplacement de l'analyse et l'emplacement du fichier converti.Dans Imagemagick pour Linux, comment convertir un lot pour un répertoire?

C'est juste qu'il y a beaucoup de conversions et j'ai un script qui devrait le trier pour moi. Actuellement, j'ai essayé

convert -resize 300x300 > /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/normal/*.jpg /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/tn_med/$1.jpg 

et

for i in $(ls /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/normal); do /usr/convert resize 360x360 > /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/normal/$i /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/tn_med/$i done; 
+1

Avez-vous essayé de regarder dans la commande linux 'find'? Plus précisément l'option '-exec'? – ircmaxell

Répondre

0

Il n'y a aucune raison de répéter votre répertoire long trois fois. Utilisez une variable pour la base. Et ne pas utiliser ls:

base="/media/usbdisk1/development/ephoto/richard/images/gallery/2007/29" 
for file in "$base/normal/*" 
do 
    convert -resize 360x360 "$file" "$base/tn_med/$(basename $file)" 
done 

Au lieu de basename vous pourriez le faire de cette façon:

convert -resize 360x360 "$file" "$base/tn_med/${file##*/}" 
+0

Merci à vous deux pour votre aide. J'espère qu'ils fonctionnent grâce à la commande exec de php - mais ils devraient .. Merci pour le commentaire sur les caractères étranges - il ne devrait pas y avoir, mais c'est toujours le cas. –

1
for i in $(ls /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/normal); do 
    convert -resize 360x360 /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/normal/$i /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/tn_med/$i; 
done 

got it!

+0

Cela ne gérera pas les noms de fichiers contenant des espaces. –

1

Comme suggéré commentaires, vous pouvez utiliser la commande find:

outdir=/media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/tn_med 
cd /media/usbdisk1/development/ephoto/richard/images/gallery/2007/29/normal 
find . -iname '*.jpg' -print0 | xargs -I{} -0 -r convert -resize 300x300 {} $outdir/{} 

En utilisant l'option -print0 et -0 de xarg, il gère également les noms de fichiers avec des espaces et autres caractères bizarres.