
У меня есть каталог, который называется 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
? Разрывы строк предназначены только для«читабельность».