Конвертировать каждый файл из JPEG в GIF в терминале

У меня есть работа с find прежде, чтобы найти все определенные файлы в папке и подпапке и что-то с этим сделать

Например, я использовал

find /folder/ -name '*.txt' -exec chmod 666 {} \;

Этот код для легкого изменения доступ на запись к каждому текстовому файлу в папке.

Теперь я попытался преобразовать каждый jpg (даже JPG) в gif таким же образом, но не уверен, что это так просто. Когда я пытаюсь использовать инструменты команды конвертирования, он хочет иметь имя входного файла и имя выходного файла, но я не думаю, что найти дают, так что, возможно, найти это не тот инструмент для использования?

6
задан 27 July 2019 в 21:09

3 ответа

Находка может использоваться для этого, но я нахожу легче использовать оболочку вместо этого. Если Ваши файлы - все в том же каталоге (никакие подкаталоги), можно просто сделать:

for f in /path/to/dir/*jpg /path/to/dir/*JPG; do
    convert "$f" "${f%.*}.gif"
done

${var%something} синтаксис удалит самое короткое соответствие для шарика something от конца переменной $var. Например:

$ var="foo.bar.baz"
$ echo "$var : ${var%.*}"
foo.bar.baz : foo.bar

Таким образом, здесь, это удаляет заключительное расширение из имени файла. Поэтому "${f%.*}.gif" исходное имя файла, но с .gif вместо .jpg или .JPG.

Если действительно необходимо рекурсивно вызвать в подкаталоги, можно использовать удар globstar опция (от man bash):

globstar
    If set, the pattern ** used in a pathname expansion con‐
    text will match all files and zero or  more  directories
    and  subdirectories.  If the pattern is followed by a /,
    only directories and subdirectories match.

Можно включить его с shopt -s globstar:

shopt -s globstar
for f in /path/to/dir/**/*jpg /path/to/dir/**/*JPG; do
    convert "$f" "${f%.*}.gif"
done
8
ответ дан 17 September 2019 в 11:52

Можно действительно использовать find - с оберткой оболочки, которая называет соответствующее convert команда и генерирует выходной файл с помощью paramemter замену.напр.

find . -name '*.jpg' -execdir sh -c '
  for f; do convert -verbose "$f" "${f%.*}.gif"; done
' find-sh {} +

Изменение -name к -iname для включения .JPG расширение (хотя примечание, что замена .gif расширение будет нижним регистром независимо).

5
ответ дан 17 September 2019 в 11:52

Существует другой инструмент в ImageMagick, mogrify, это разработано для создания пакетной обработки легкой. Это делает то, что Вы хотите:

shopt -s globstar
mogrify -format gif **/*.jpg
1
ответ дан 17 September 2019 в 11:52

Другие вопросы по тегам:

Похожие вопросы: