Назад | Перейти на главную страницу

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

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