Рейтинг:5

ImageMagick конвертировать в несколько файлов

флаг ru

У меня есть 3 файла в каталоге:

ааа.jpg    
bbb.jpg  
ccc.jpg  

Я могу уменьшить изображение, используя ImagkMagick convert:

конвертировать aaa.jpg -изменить размер 1200x900 aaa-small.jpg  

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

конвертировать *.jpg -изменить размер 1200x900 *-small.jpg  

но это приводит к файлам с такими именами:

*-маленький-0.jpg  
*-маленький-1.jpg  
*-маленький-2.jpg  

Я хочу:

ааа-маленький.jpg  
bbb-small.jpg  
ccc-маленький.jpg  

Как мне это сделать?

Brian Z avatar
флаг uz
Mogrify — это команда ImageMagick, предназначенная для пакетных заданий. Вопрос связан с этим вопросом и, возможно, дублирует его: https://superuser.com/questions/597428/how-can-i-run-mogrify-but-prefix-the-filename
Рейтинг:9
флаг hr

Это досадно непрозрачно в документации, но вы можете передать цитируется скорлупа к конвертировать (цитируется для предотвращения преждевременного расширения оболочки) и используйте Процент экранирования имени файла для построения имен выходных файлов в форме %[имя файла:метка] (куда этикетка произвольная метка, указанная пользователем), используя escape-символ входного базового имени %[базовое имя] или его устаревший эквивалент %t:

$ лс ???.jpg
aaa.jpg bbb.jpg ccc.jpg

тогда

$ convert '*.jpg' -set filename:fn '%[basename]-small' -resize 1200x900 '%[filename:fn].jpg'

в результате чего

$ ls ???-small.jpg
aaa-small.jpg bbb-small.jpg ccc-small.jpg
Рейтинг:6
флаг jp

В цикле for можно использовать функции, описанные в человек в

Расширение параметра
...
  ${параметр%%слово}
      Удалить соответствующий шаблон суффикса. Слово расширяется, чтобы создать шаблон только
      как в расширении пути. Если шаблон соответствует конечной части
      расширенное значение параметра, то результатом расширения является расширенное
      значение параметра с кратчайшим шаблоном соответствия (случай ``%'') или
      самый длинный совпадающий шаблон (случай ``%%'') удален. Если параметр @ или *,
      операция удаления шаблона применяется к каждому позиционному параметру по очереди,
      и расширение является результирующим списком. Если параметр является переменной массива
      с индексом @ или * операция удаления шаблона применяется к каждому элементу
      массива по очереди, а расширение представляет собой результирующий список.

Следующий однострочник должен выполнить эту работу.

для f в ./*.jpg ; конвертировать "$f" -resize 1200x900 "${f%.jpg}-small.jpg" ; сделано

Это работает в бить, которая является стандартной оболочкой Ubuntu.Я думаю, что его легче запомнить, чем элегантный метод Steeldriver (который использует только конвертировать и нет за построить).

rexkogitans avatar
флаг cn
+1, потому что это следует философии Unix, согласно которой каждый инструмент должен эффективно выполнять небольшую часть работы, а не один инструмент делает все.
7efkvNEq avatar
флаг gh
Я предлагаю изменить имена файлов с `*.jpg` на `./*.jpg`, если какое-то имя начинается с `-`.
sudodus avatar
флаг jp
@7efkvNEq, спасибо, это хорошая идея.
Рейтинг:-2
флаг bd
мкдир маленький
для f в *.jpg ; конвертировать $f -resize 1200x900 small/$f ; сделано
флаг ru
Это не отвечает на вопрос. Имена файлов одинаковые.
sudodus avatar
флаг jp
@AllLelopath, правда, имена файлов те же, но в другом каталоге. Я использовал этот метод, и я думаю, что это хорошо ;-)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.