У меня есть работа с find прежде, чтобы найти все определенные файлы в папке и подпапке и что-то с этим сделать
Например, я использовал
find /folder/ -name '*.txt' -exec chmod 666 {} \;
Этот код для легкого изменения доступ на запись к каждому текстовому файлу в папке.
Теперь я попытался преобразовать каждый jpg (даже JPG) в gif таким же образом, но не уверен, что это так просто. Когда я пытаюсь использовать инструменты команды конвертирования, он хочет иметь имя входного файла и имя выходного файла, но я не думаю, что найти дают, так что, возможно, найти это не тот инструмент для использования?
Находка может использоваться для этого, но я нахожу легче использовать оболочку вместо этого. Если Ваши файлы - все в том же каталоге (никакие подкаталоги), можно просто сделать:
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
Можно действительно использовать find
- с оберткой оболочки, которая называет соответствующее convert
команда и генерирует выходной файл с помощью paramemter замену.напр.
find . -name '*.jpg' -execdir sh -c '
for f; do convert -verbose "$f" "${f%.*}.gif"; done
' find-sh {} +
Изменение -name
к -iname
для включения .JPG
расширение (хотя примечание, что замена .gif
расширение будет нижним регистром независимо).
Существует другой инструмент в ImageMagick, mogrify
, это разработано для создания пакетной обработки легкой. Это делает то, что Вы хотите:
shopt -s globstar
mogrify -format gif **/*.jpg