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
выписывает уменьшенную версию.