Я хочу обертати всі зображення в каталозі, які відповідають шаблону.
Поки що я маю:
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
буде Infact обертатися все .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
буде більш підходящим. Ура!