Я хочу повернуть все изображения в каталоге, которые соответствуют шаблону.
Пока что у меня есть:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
но что не дает выхода?
Я хочу повернуть все изображения в каталоге, которые соответствуют шаблону.
Пока что у меня есть:
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 file+'_rotated'.JPG
done
но что не дает выхода?
Ответы:
Есть довольно много проблем с вашим кодом. Прежде всего, вы анализируете ls, что является плохой идеей . Вы также должны ссылаться на переменную так, $file
как вы указали, и вы также должны заключить ее в кавычки, чтобы она не разбивалась на пробелы. Вы заявляете, num
но это никогда не используется. Более безопасный способ был бы:
find /tmp/p/ -name "DSC*.JPG" | while IFS= read -r file; do
convert "$file" -rotate 90 "$file"_rotated.JPG
done
Это по-прежнему будет иметь проблемы, если ваши файлы содержат символы новой строки, но, по крайней мере, не прервется, если ваш путь будет содержать пробелы.
Если все файлы находятся в одном и том же каталоге, его можно еще больше упростить с помощью глобализации. Вы также можете использовать расширение параметра для создания foo_rotated.JPG1
вместо 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
Лучший One-Liner для поворота всех изображений с помощью imagemagick
mogrify -rotate 90 /tmp/p/DSC*.JPG
будет фактически вращать все, .JPG
начиная с DSC
в p
каталоге
Mogrify (часть imagemagick ) отличается от того, Convert
что он изменяет оригинальный файл
http://www.imagemagick.org/script/mogrify.php
Простой метод с использованием PE (расширение параметров)
for f in /tmp/p/DSC*.JPG
do
convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG
done
bash
конкретного, это совершенно стандартный синтаксис POSIX sh.
Не разбирайтеls
и здесь ls
не требуется. Кроме того, вы должны заключать в кавычки ваши переменные в случае, если они содержат пробелы.
for file in *.JPG; do
convert -rotate 90 "$file" rotated_"$file"
done
Не имиджмагическое решение, а
sips -r 90 *.JPG
повернет все изображения, заканчивающиеся на .JPG, на 90 градусов. Это хороший лайнер.
Мне нужно было ссылаться на файл как $file
, т.е.
for file in `ls /tmp/p/DSC*.JPG`; do
convert $file -rotate 90 $file+'_rotated'.JPG
done
Вы можете скопировать / вставить этот код в 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_containing_images
original_filename.JPG_rotated.JPG"
. добавление"${file%.JPG}"_rotated.JPG
будет более подходящим imho. Ура!