У меня есть каталог под названием src
полный подкаталогов и других изображений. Я попытался использовать один оператор bash, чтобы автоматически изменить их размер в другой целевой каталог, называемый thumb
как это:
find ./src -type f -follow -iname '*.jp*g' -exec convert -resize 150x150x "{}" "./thumb/${size}/{}" \;
Это не сработало, потому что thumb
каталог изначально пуст и не имеет той же структуры каталогов, что и src
.
Я попытался найти man convert
но я не могу найти возможность автоматически создавать каталоги на convert
. Какой эффективный способ преобразовать все мои изображения в размер миниатюр в thumb
каталог? Нужно ли мне предварительно создать все подкаталоги на пальце?
РЕДАКТИРОВАТЬ
Я передал команду выше:
find ./src -type d -follow -exec mkdir -p "thumb/${size}/{}" \;
Но мне любопытно, смогу ли я сделать все одной командой вместо двух?
Философия 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
? Разрывы строк предназначены только для «Читаемость».