Назад | Перейти на главную страницу

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

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

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

mogrify -quality 80% "* .jpg"

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

mogrify-качество 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

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

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

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