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

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

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

mogrify -quality 80% "* .jpg"

mogrify -quality 80% "* .jpeg"

mogrify -quality 80% "* .gif"

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

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

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

спасибо.

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

Спасибо за это. Предварительно похоже, что 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
задан 10 February 2019 в 20:18
1 ответ

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

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

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

Теги

Похожие вопросы