Existem alguns problemas com o seu código. Primeiro de tudo, você está analisando ls, que é uma Má Idéia . Você também precisa se referir à variável como $file
como você aponta e você também deve citá-la para não quebrar 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 caminho contiver espaços.
Se os arquivos estiverem todos no mesmo diretório, pode ser ainda mais simplificado usando globbing. Você também pode usar a expansão de parâmetro para criar foo_rotated.JPG1
em vez de foo.JPG_rotated.JPG
:
for file in /tmp/p/DSC*.JPG; do
convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done