Изменить размер списка изображений в строке команды - PullRequest
7 голосов
/ 18 февраля 2009

Я хотел бы изменить размер списка изображений, все в каталоге. Для этого я использую convert из imagemagick. Я хотел бы изменить размер

image1.jpg
image2.jpg
...

в

image1-resized.jpg
image2-resized.jpg
...

Мне было интересно, есть ли способ добиться этого в одной командной строке. Часто может оказаться полезным элегантное решение, и не только в этом случае.

EDIT:

Я бы хотел не скриптоподобное решение, т.е. без цикла.

Ответы [ 4 ]

10 голосов
/ 18 февраля 2009

Если вы хотите изменить их размер до 800x600:

for file in *.jpg; do convert -resize 800x600 -- "$file" "${file%%.jpg}-resized.jpg"; done

(работает в bash)

8 голосов
/ 18 февраля 2009
ls *.jpg|sed -e 's/\..*//'|xargs -I X convert X.jpg whatever-options X-resized.jpg

Вы можете исключить sed и быть универсальным расширением, если хотите принять немного другое конечное имя файла, «resized-image1.jpg» вместо «image1-resized.jpg»:

ls|xargs -I X convert X whatever-options resized-X
4 голосов
/ 22 мая 2015

GNU Parallel даже проще, чем для циклов, и часто быстрее:

parallel convert -resize 800x600 -- "{}" "{.}-resized.jpg" ::: *.jpg

Здесь происходит несколько вещей справа налево:

  • ::: *.jpg означает запуск команды для каждого файла jpg
  • {.} означает вставку текущего имени файла без суффикса (.jpg)
  • {} означает вставить текущее имя файла
  • parallel означает выполнение следующей команды много раз параллельно. Он выберет максимальное число параллельных операций, соответствующее количеству ядер вашего компьютера. По окончании каждого запускается следующий, пока все файлы jpg не будут преобразованы.

Запускает команду convert --resize 800x600 -- foo.jpg foo-resized.jpg для каждого файла. -- указывает конвертировать прекратить обработку флагов, если имя файла начинается с -.

P.S. На моем Mac установлено Homebrew , поэтому я смог установить параллельный интерфейс и конвертировать с

brew install parallel
brew install imagemagick
2 голосов
/ 18 февраля 2009

Если ваши файлы изображений имеют разные расширения:

for f in *; do convert -resize 800x600 -- "$f" "${f%.*}-resized.${f##*.}"; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...