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

Обработка файлов изображений один раз и только один раз без потери

У меня есть установка wordpress с большим количеством (миллионами) изображений. Я хочу оптимизировать эти изображения с помощью ImageMagick mogrify, но я хочу обработать их только один раз (обработка их снова и снова приведет к ухудшению качества изображения).

Мне нужно оптимизировать на месте (я не могу скопировать оптимизированные изображения в новое место, потому что, если бы я это сделал, они не были бы доступны для wordpress).

Пользователи могут загружать новые изображения в любой момент (даже во время процесса оптимизации). Даже более сложные пользователи могут загружать то же изображение с тем же именем. Итак .... я пытаюсь написать следующий сценарий:

Проблема с этим подходом заключается в том, что все новые изображения будут иметь дату последнего изменения ПОСЛЕ текущей переменной даты / времени, поскольку она сохраняется в начале выполнения сценария.

Я мог бы вместо этого записать дату / время завершения сценария в файл lastrun, но тогда я потенциально пропускаю загрузку любых файлов во время выполнения сценария.

Итак, как мне убедиться, что я не обрабатываю изображения дважды и не пропускаю обработку изображений.

Вот мой сценарий как есть:

 # Only uncomment this the very first time to generate the .lastrun file.
 #echo "1900-01-01 01:01:01" >/scripts/config/image-optimizer/.lastrun
 sudo mount.cifs //backup-server/original-images /mnt/originals -v -o user=myuser,dom=mydomain,password=redacted
 last=$(cat /scripts/config/image-optimizer/.lastrun)
 curr=$(date "+%Y-%m-%d %H:%M:%S")
 cd /path/to/wordpress
 find ./ -type f -name "*.jpg" -size +10k -newermt "$last" -exec cp --parents {} /mnt/originals \; -exec mogrify -quality 70 -strip -interlace Plane -monitor {} \;
 echo "$curr" >/scripts/config/image-optimizer/.lastrun

После оптимизации коснитесь файла и установите время модификации $ curr:

find ./ -type f -name "*.jpg" -size +10k -newermt "$last" -exec cp --parents {} /mnt/originals \; -exec mogrify -quality 70 -strip -interlace Plane -monitor {} \; -exec touch --date="$curr" {} \;