Как повернуть все изображения в каталоге с помощью imagemagick?

Я хочу повернуть все изображения в каталоге, соответствующем шаблону.

Пока у меня есть:

for file in `ls /tmp/p/DSC*.JPG`; do convert $file -rotate 90 file+'_rotated'.JPG done 

но это не дает результата?

  • Предотвращение разрывов в середине слова в a2ps
  • Как удалить символ точки из строки без вызова sed или awk снова?
  • Пакетное переименование файлов с восходящим числом
  • Судебно-медицинский анализ: найти все файлы, модифицированные вокруг известного
  • Создание shebang, указывающее переносимо интерпретатору в папке сценария
  • $ HOME / bin dir не находится в $ PATH
  • Переименование файлов в зависимости от их родительского каталога
  • Сценарий для поиска среды рабочего стола по умолчанию?
  • 7 Solutions collect form web for “Как повернуть все изображения в каталоге с помощью imagemagick?”

    В коде есть немало проблем. Прежде всего, вы разбираете 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 

    Простой метод, использующий PE (расширение параметра) BASH

     for f in /tmp/p/DSC*.JPG do convert -rotate 90 "$f" "${f%.JPG}"_converted.JPG done 

    Не разбирайте ls и ls здесь не требуется. Кроме того, вы должны указывать свои переменные, если они содержат пробелы.

     for file in *.JPG; do convert -rotate 90 "$file" rotated_"$file" done 

    Не образное решение, но

     sips -r 90 *.JPG 

    будет поворачивать все изображения, заканчивающиеся на .JPG 90 градусов. Это хороший лайнер.

    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

    Мне нужно было ссылаться на файл как $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

    Linux и Unix - лучшая ОС в мире.