Я пытаюсь преобразовать набор изображений к миниатюрам, которые могли бы быть в нескольких подкаталогах, и сохранять копию изображения как миниатюра в подкаталоге, но я не могу выяснить синтаксис. Любой совет приветствовался бы.
convert test/*/*.jpg -50x50 test/*/*_thumb.jpg
Необходимо использовать, находят для нахождения всех файлов, в которых Вы нуждаетесь.
find test -iname *.jpg -exec convert {} -resize 50x50 {}_thumb \;
И затем необходимо переименовать файлы с именем *.jpg_thumb к *_thumb.jpg при помощи:
find -name *.jpg_thumb -exec rename -e 's/^(.*)(.jpg)(_thumb)$/\1\3\2/' '{}' \;
Примечание, что-50x50 не является легальным параметром для преобразования. Необходимо использовать -resize
параметр со значением 50x50
как в примере выше.
Цикл оболочки должен также сделать:
for file in test/*/*.jpg ; do
new=${file%.jpg}_thumb.jpg
convert "$file" -resize 50x50 "$new"
done
Или с Bash globstar
, который лучше, если файлы могут быть на произвольных уровнях каталога:
shopt -s globstar
for file in test/**/*.jpg ; do ...
${file%.jpg}
принимает значение переменной file
и удаляет строку .jpg
от конца. (см. BashGuide на расширениях параметра),