Существует довольно много проблем с Вашим кодом. В первую очередь, Вы анализируете ls, который является Плохой Идеей. Также необходимо обратиться к переменной как $file
как Вы указываете, и необходимо также заключить его в кавычки так, это не повредится на пробелах. Вы объявляете num
но это никогда не используется. Более безопасный путь был бы:
find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
convert "$file" -rotate 90 "$file"_rotated.JPG
done
Это будет все еще иметь проблемы, если Ваши файлы будут содержать новые строки, но по крайней мере не повредятся, если Ваш путь содержит пробелы.
Если файлы - все в том же каталоге, он может быть далее упрощен с помощью globbing. Можно также использовать расширение параметра для создания foo_rotated.JPG1
вместо foo.JPG_rotated.JPG
:
for file in /tmp/p/DSC*.JPG; do
convert "$file" -rotate 90 "${file%.JPG}"_rotated.JPG
done
Простой метод с помощью PE (Расширение Параметра)
for f in /tmp/p/DSC*.JPG
do
convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
bash
конкретный там, это - совершенно стандартный POSIX sh синтаксис. пространство
– Stéphane Chazelas
29.09.2013, 22:39
Не анализировать ls
и ls
не требуется здесь. Кроме того, необходимо заключить переменные в кавычки в случае, если они содержат пробелы.
for file in *.JPG; do
convert -rotate 90 "$file" rotated_"$file"
done
Я должен был обратиться к файлу как $file
, т.е.
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 $file+'_rotated'.JPG
done
Это не решение imagemagic, но
sips -r 90 *.JPG
поворачивает все изображения, оканчивающиеся на .JPG, на 90 градусов. Это хороший лайнер.
mogrify -rotate 90 *.jpg
imagemagick
mogrify -rotate 90 /tmp/p/DSC*.JPG
- лучший однострочник для поворота всех изображений.
действительно повернет все .JPG
, начиная с DSC
в каталоге p
Mogrify (часть imagemagick) отличается от Convert
тем, что изменяет исходный файл
http://www.imagemagick.org/script/mogrify.php
Вы можете скопировать / вставить этот код в ubuntu и сохранить его как "rotate.sh"
#!/bin/bash -e
CUR_DIR=`pwd`
cd "${1}"
for file in *.jpg; do
convert "${file}" -rotate 90 "${file}";
done
cd CUR_DIR
После сохранения этого файла запустите его из терминала, используя ./ rotate.sh folder_contain_images
original_filename.JPG_rotated.JPG"
. добавление"${file%.JPG}"_rotated.JPG
будет более соответствующим, по моему скромному мнению.Удачи! – Valentin Bajrami 29.09.2013, 20:39