Mogrify команды в crontab, гарантируя, что файлы не обрабатываются дважды

У меня есть папка с изображениями, которая обслуживает контент, она содержит файлы jpeg, jpg и gif. Больше файлов добавляются автоматически все время.

Я собираюсь добавить следующие команды в crontab (с соответствующим путем к файлу, конечно)

mogrify - качество 80% "*.jpg"

mogrify - качество 80% "*.jpeg"

mogrify - качество 80% "*.gif"

Я хотел бы почтительно спросить, знает ли кто-нибудь, будут ли эти команды обрабатывать файлы несколько раз, поэтому, когда файл конвертируется в 80%, при следующем запуске cron он еще больше его уменьшает и т. Д...

Гарантирует ли ImageMagick, что он не обрабатывает один и тот же файл дважды, и если нет, то как мне справиться с этим, если я не могу переименовать файлы.

Любая помощь от сообщества будет принята с благодарностью.

благодарю вас.

Отредактировано: Спасибо пользователю: Свен за ответ ниже. Это сценарий, который я сейчас использую, который работает:

Спасибо тебе за это. Похоже, что mogrify может писать на месте, предварительно.

Я буду использовать этот скрипт:

#!/bin/bash

watchedFolder=[insert path here]
quality=70

while [ true ]
do
fileName=$(inotifywait -q -e create --format "%f" "$watchedFolder")
sleep 1s
mogrify -quality 80% "$watchedFolder/$fileName"
sleep 2s
echo "Processed " $fileName
sleep 2s
done

1 ответ

Решение

IMagick будет обрабатывать любые файлы каждый раз, когда вы его вызываете, у него нет возможности определить, что файл уже был обработан. В конце концов, вы говорите ему "обрабатывать все файлы jpg", так что это совершенно нормально и ожидаемо.

Есть много способов обойти эту проблему, в зависимости от ваших конкретных обстоятельств.

  • Вы можете написать обертку вокруг вашей работы cron, которая будет хранить список файлов, которые она уже обработала, и обрабатывать только новые файлы. Это будет работать в большинстве сценариев, но также является наименее элегантным и сложным решением.
  • Используйте схему именования. Переименуйте небольшие файлы и используйте подстановочные знаки, которые исключают маленькие версии.
  • Измените свой рабочий процесс. Поместите новые файлы в промежуточную область и запишите меньшие файлы в конечный пункт назначения.
  • Проверить, если mogrify может писать на месте (в отличие от записи в новый файл и последующего удаления старого). Если это возможно, используйте inotifywatch чтобы узнать о новых файлах и обрабатывать их по мере их поступления. Написание важно в этом методе, так как в противном случае inotifywatch также будет видеть новый файл, когда mogrify выписывает уменьшенную версию.
Другие вопросы по тегам