
У меня исходные изображения находятся в следующей структуре каталогов:
./Alabama/1.jpg
./Alabama/2.jpg
./Alabama/3.jpg
./Alaska/1.jpg
...the rest of the states...
Я хотел преобразовать все исходные изображения в миниатюры, чтобы можно было отображать их на веб-сайте. После небольшого копания/экспериментирования я придумал следующую команду Linux:
find . -type f -iname '*.jpg' | sed -e 's/\.jpg$//' | xargs -I Y convert Y.jpg -thumbnail x100\> Y-small.jpg
Он рекурсивно находит все изображения jpg в моих подкаталогах, удаляет из них тип файла (.jpg), чтобы я мог переименовать их позже, затем преобразует их в миниатюру и переименовывает их, добавляя «-small» перед типом файла.
Это сработало для моих целей, но это немного сложно и не очень надежно. Например, я не уверен, как вставить 'small-' в начало имени файла (так что ./Alabama/small-1.jpg).
Вопросы:
- Существует ли лучший и более надежный способ создания миниатюр из изображений, расположенных в нескольких подкаталогах?
- Могу ли я сделать существующую команду более надежной (например, используя sed для переименования выводимой миниатюры перед ее сохранением — по сути, изменив часть Y-small.jpg).
решение1
Если это всегда всего лишь один уровень каталогов ниже вашей позиции, вы можете попробовать выполнить цикл следующим образом:
for dir in *; do
[ ! -d "$dir" ] && continue; # skip non-directory entries, i.e. additional files
cd "$dir"
for file in *.jpg; do
convert -thumbnail x100 "$file" "small-${file}" # creates e.g. small-1.jpg
done
done