У меня есть установка 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" {} \;