Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Помогите доработать команду для изменения размера изображений  (Прочитано 740 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sherba800

  • Автор темы
  • Любитель
  • *
  • Сообщений: 63
    • Просмотр профиля
Есть много папок и в них подпапки с изображениями. Всегда пользовался следующей командой для изменения размера картинок:
i=jpg; for filename in *.$i; do convert "$filename" -resize "1500x1500>" -quality 80 "${filename/.$i/.jpg}"; doneНо теперь понадобилось затрагивать и подпапки. Как мне доработать скрипт, чтобы он работал не только с изображениями в заданной папке, но и с изображениями в подпапках?
« Последнее редактирование: 07 Марта 2016, 19:00:12 от sherba800 »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
${filename/.$i/.jpg} — это не понял. Поменять .jpg на .jpg?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн thunderamur

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6847
    • Просмотр профиля
sherba800,
find "$3" -type f -regextype posix-extended -iregex ".*\.(jpg|png|JPG|PNG)$" | while read FILE
do
echo "Converting $FILE"
convert "$FILE" -resize "$1" -quality "$2" "$FILE"
done

script 1920x1080 90 /home/user/pictures
« Последнее редактирование: 07 Марта 2016, 21:32:00 от thunderamur »

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
thunderamur,
Ну или find, или цикл…find -type f \( -iname *jpg -o -iname *png \) -exec convert "{}" -resize "1500x1500>" -quality 80 "{}" \;
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн sherba800

  • Автор темы
  • Любитель
  • *
  • Сообщений: 63
    • Просмотр профиля
${filename/.$i/.jpg} — это не понял. Поменять .jpg на .jpg?
Я иногда делаю так: ${filename/.$i/_small.jpg}, тогда в папке с картинками создаётся уменьшенная копия, когда перезаписать хочу просто убираю _small. Скопировал как было, моя вина.

thunderamur,
Ну или find, или цикл…find -type f \( -iname *jpg -o -iname *png \) -exec convert "{}" -resize "1500x1500>" -quality 80 "{}" \;
Спасибо, это то, что надо, немного доработал под себя и теперь использовать буду. У меня только вопрос: что значит -o между паттернами для поиска по расширению? В мане не нашёл, а сам только месяц как за изучение скриптов взялся.

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Цитата: man find
OPERATORS
       Listed in order of decreasing precedence:

       ( expr )
              Force  precedence.   Since  parentheses are special to the shell, you will normally need to quote them.  Many of the examples in this manual
              page use backslashes for this purpose: `\(...\)' instead of `(...)'.

      ! expr True if expr is false.  This character will also usually need protection from interpretation by the shell.

       -not expr
              Same as ! expr, but not POSIX compliant.

      expr1 expr2
              Two expressions in a row are taken to be joined with an implied "and"; expr2 is not evaluated if expr1 is false.

      expr1 -a expr2
              Same as expr1 expr2.

      expr1 -and expr2
              Same as expr1 expr2, but not POSIX compliant.

       expr1 -o expr2
              Or; expr2 is not evaluated if expr1 is true.

       expr1 -or expr2
              Same as expr1 -o expr2, but not POSIX compliant.

       expr1 , expr2
              List; both expr1 and expr2 are always evaluated.  The value of expr1 is discarded; the value of the list is the value of  expr2.  The  comma
              operator  can be useful for searching for several different types of thing, but traversing the filesystem hierarchy only once.  The -fprintf
              action can be used to list the various matched items into several different output files.
« Последнее редактирование: 08 Марта 2016, 13:10:06 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.073 секунд. Запросов: 25.