Пакетная оптимизация изображений с копированием результата. На сервере
На web-сервере имеется многоуровневая структура каталогов с jpg-изображениями. Нужно их оптимизировать, сохранив оптимизированные в новом каталоге соблюдая исходную структуру.
Например, исходная структура:
img/vesna/gorod/2020/
img/vesna/les/2020/
img/vesna/pole/2020/
img/leto/gorod/2020/
img/leto/les/2020/
img/leto/pole/2020/
Оптимизированные нужно сложить в
imgopt/vesna/gorod/2020/
imgopt/vesna/les/2020/
imgopt/vesna/pole/2020/
imgopt/leto/gorod/2020/
imgopt/leto/les/2020/
imgopt/leto/pole/2020/
Подскажете как это сделать непосредственно на сервере? SSH доступ имеется.
PS. Насколько я нагуглил jpegoptim может сложить все в один каталог, а надо раскидать соответственно исходному расположению. Или же я не нашел как им это провернуть.
Ответы (1 шт):
pushd ./images/
find . -name \*.jpg -type f -print0 |
while IFS= read -r -d '' src; do
dest=../imgopt/$(dirname "$src")
mkdir -p "$dest"
jpegoptim --force --dest="$dest" "$src"
done
popd
Перейдем в папку с картинками чтоб получать относительные пути в find.
find просто выводит список файлов с разделителем \0 - это нужно чтоб пробелы в именах файлов не сломали список.
Дальше хитрый read, который читает этот путь в переменную по разделителю \0
dirname уберет имя файла из пути - выйдет ../imgopt/./vesna. точка не проблема - линукс её отработает.
Создали папку и пишем jpegoptim с выхлопом в эту папку. --force чтоб уже оптимизированные файлы не пропустить.