2013-04-20 3 views
-1

У меня есть много изображений JPEG на моем сервере, и они добавили день evry. Мне нужно оптимизировать эти изображения.Оптимизация пакета jpeg в linux

Чтобы оптимизировать меня использовать следующую команду

find . -iname "*.jpg" -exec jpegoptim -m85 --strip-all {} \; 

Но найти команду находит все изображения, а не только новые! Я знаю, что я могу указать параметры -ctime и -mtime, но когда jpegoptim оптимизирует изображение, время создания изображения меняется на сейчас! Поэтому я не могу указать последнее время мода для команды find.

Я думаю, что это решение - это сохранение уже обработанных имен файлов в текстовом файле, а при повторном поиске команды исключить уже обработанный файл.

Как я могу это сделать? Как добавить найденное имя файла в текстовый файл и как проверить имя файла в текстовом файле в следующем пути?

+0

Если я запускаю эту команду в 5:00 каждый день с помощью cron с -ctime -1 -mtime -1, то поиск находит все изображения в течение одного дня. Оптимизированы снимки вчера оптимизируются (они были оптимизированы после 5:00 и имеют ctime меньше, чем 1 день назад!). – Nik

+0

В идеале, обрабатывайте их при их загрузке или, по крайней мере, сохраняйте журнал необработанных файлов (затем используйте этот список для оптимизации, а затем удалите его). – BraveNewCurrency

ответ

0

Вы можете использовать inotifywait из inotify-tools (или какой-либо другой inotify фронтэнда) постоянно следить за папку, содержащую ваши JPEGs и они конвертируются на лету, как только они будут загружены.

$ inotifywait -mrq --format '%w%f' -e create . | while read file; do 
     [ "${file##*.}" = "jpg" ] || continue; 
     [ -f "${file}" ] || continue; 
     echo "jpegoptim -m85 --strip-all '$file'"; 
    done 

Это часы для всех файлов творениями в текущей папке (-e create .) рекурсивно (-r), и вы должны проверить расширение файла (.jpg) себя, как показано на рисунке, это означает, что в случае, если будет много не-jpeg-творения в одной папке, это лишние накладные расходы. Если это для вас проблема, вы можете использовать аргумент --exclude и указать отрицательное регулярное выражение для фильтрации файлов, которые не соответствуют желаемому расширению (что громоздко и выглядит не очень красиво и прямолинейно), или вы можете проверить текущую версию от git repo самостоятельно, которая предоставляет фильтр --include (v3.14 не имеет) и есть inotifywait только файлы отчетов, соответствующие вашим критериям.

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

Смежные вопросы