Обработка графических файлов один раз и только один раз без пропусков

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