Quero girar todas as imagens em um diretório que corresponda a um padrão.
Até agora eu tenho:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
mas isso não dá saída?
Quero girar todas as imagens em um diretório que corresponda a um padrão.
Até agora eu tenho:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
mas isso não dá saída?
Respostas:
Existem alguns problemas com seu código. Primeiro de tudo, você está analisando ls, o que é uma Má Idéia . Você também precisa se referir à variável conforme $file
indicado e também deve citá-la para que não se quebre em espaços. Você está declarando, num
mas nunca é usado. Uma maneira mais segura seria:
find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
convert "$file" -rotate 90 "$file"_rotated.JPG
done
Isso ainda terá problemas se seus arquivos contiverem novas linhas, mas pelo menos não serão interrompidos se o seu caminho contiver espaços.
Se os arquivos estiverem todos no mesmo diretório, poderá ser ainda mais simplificado usando o globbing. Você também pode usar a expansão de parâmetros para criar, em foo_rotated.JPG1
vez de foo.JPG_rotated.JPG
:
for file in /tmp/p/DSC*.JPG; do
convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done
mogrify -rotate 90 *.jpg
O One-Liner melhor para girar todas as imagens com o imagemagick
mogrify -rotate 90 /tmp/p/DSC*.JPG
irá infactar girar tudo .JPG
começando com DSC
nop
diretório
Mogrify (parte do imagemagick) difere de Convert
que modifica o arquivo original
http://www.imagemagick.org/script/mogrify.php
Um método simples usando PE (expansão de parâmetros) é
for f in /tmp/p/DSC*.JPG
do
convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
bash
específico, é a sintaxe POSIX sh perfeitamente padrão.
Não analisels
e o ls
não é necessário aqui. Além disso, você deve citar suas variáveis caso elas contenham espaços.
for file in *.JPG; do
convert -rotate 90 "$file" rotated_"$file"
done
Não é uma solução imagemagic, mas
sips -r 90 *.JPG
girará todas as imagens que terminem em .JPG 90 graus. É um bom forro.
Eu precisava me referir ao arquivo como $file
, ie
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 $file+'_rotated'.JPG
done
Você pode copiar / colar esse código no ubuntu e salvá-lo como "rotate.sh"
#!/bin/bash -e
CUR_DIR=`pwd`
cd "${1}"
for file in *.jpg; do
convert "${file}" -rotate 90 "${file}";
done
cd CUR_DIR
Depois de salvar este arquivo, execute-o no terminal usando ./rotate.sh folder_containing_images
original_filename.JPG_rotated.JPG"
. adicionar"${file%.JPG}"_rotated.JPG
será imho mais apropriado. Felicidades!