Обработка графических файлов один раз и только один раз без пропусков
У меня есть установка WordPress с большим количеством (миллионы) изображений. Я хочу оптимизировать эти изображения, используя ImageMagick Mogrify, но я хочу обработать их только один раз (обработка их снова и снова приведет к ухудшению качества изображения).
Я должен оптимизировать на месте (я не могу скопировать оптимизированные изображения в новое место, потому что если бы я сделал - они не были бы доступны для WordPress).
Пользователи могут загружать новые изображения в любой момент (даже во время процесса оптимизации). Даже более сложные пользователи могут загружать одно и то же изображение с тем же именем. Итак... что я пытаюсь сделать, это сценарий следующее:
- Сохранить текущую дату / время в переменной
- Получить дату последнего запуска оптимизации изображения из файла lastrun. Если файл последнего запуска не существует, по умолчанию используется значение "1900-01-01 01:01:01".
- Подключите общий ресурс к серверу резервного копирования (где на всякий случай будут храниться неоптимизированные оригиналы)
- Поиск любых файлов с расширением *.jpg размером более 10 КБ, измененных не позднее последней даты запуска
- Для любых подходящих файлов:
- Скопируйте их в резервную копию / оригинал
- Оптимизируйте их на месте:
- Уменьшить качество до 70%
- Уберите любые комментарии и метаданные
- Создавайте прогрессивные jpgs
- Сохраните текущую дату / время (от первого шага) до последнего файла времени выполнения (чтобы мы не обрабатывали одни и те же изображения снова и снова)
Проблема этого подхода заключается в том, что все новые изображения будут иметь дату последнего изменения ПОСЛЕ текущей переменной даты / времени, поскольку она сохраняется в начале выполнения скрипта.
Вместо этого я мог бы записать дату / время завершения скрипта в файл 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
1 ответ
После оптимизации коснитесь файла и установите время изменения в $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" {} \;