У меня есть оригинальные изображения в структуре каталогов, которая выглядит следующим образом:

./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).

Вопросы:

  1. Есть ли лучший, более надежный способ создания миниатюр из изображений, которые находятся в нескольких подкаталогах?
  2. Могу ли я сделать существующую команду более устойчивой (например, используя sed, чтобы переименовать выведенный эскиз перед его сохранением - в основном измените часть Y-small.jpg).

1 ответ1

0

Если это всегда только один уровень каталогов ниже вашей позиции, вы можете попробовать выполнить цикл следующим образом:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .