Возникли проблемы с командой `convert`, когда в месте назначения отсутствуют подкаталоги

Возникли проблемы с командой `convert`, когда в месте назначения отсутствуют подкаталоги

У меня есть каталог, который называется srcполный подкаталогов и других изображений. Я попытался использовать один оператор bash, чтобы автоматически изменить их размер в другой целевой каталог, который называется thumbтак:

find ./src -type f -follow -iname '*.jp*g' -exec convert -resize 150x150x "{}" "./thumb/${size}/{}" \;

Это не сработало, поскольку thumbкаталог изначально пуст и не имеет такой же структуры каталогов, как src.

Я пытался поискать, man convertно не могу найти опцию автоматического создания каталогов на convert. Какой эффективный способ конвертировать все мои изображения в размер миниатюры в thumbкаталоге? Нужно ли мне предварительно создавать все подкаталоги в thumb?


РЕДАКТИРОВАТЬ

Я предварил команду выше следующим образом:

find ./src -type d -follow -exec mkdir -p "thumb/${size}/{}" \;

Но мне интересно, смогу ли я сделать все это одной командой вместо двух?

решение1

Философия UNIX заключается в том, чтобы иметь команды, которые делают одну и только одну вещь. Команды, которые могут записывать в файл вместостандартный выводуже расширяют это правило.

Сможете ли вы сделать все в одной команде, зависит от вашего определения. Делает ли это:

find ./src -type f -follow -iname '*.jp*g' -exec /bin/sh -c \
'mkdir -p `dirname "thumb/'${size}'/{}"` &&'\
'convert -resize 150x150x "{}" "./thumb/'${size}'/{}' \;

считаются одной командой или несколькими: find, sh, mkdir, dirname, convert? Разрывы строк предназначены только для«читабельность».

Связанный контент