jpegoptim сохранить оболочку при последнем запуске и проверить файлы или папки после этой даты
У меня есть тысячи изображений, которые я оптимизирую еженедельно, запуская их через cronjob. Моя проблема в том, что он также ищет оптимизированные изображения, которые снижают нагрузку на процессор. Как я мог сохранить последнее сканирование / оптимизацию и начать оптимизировать файлы и папки после этой даты?
Мой код
find . -name '*.jpg' | xargs jpegoptim --strip-all
find . -name '*.jpg' | xargs jpegoptim --all-progressive
chmod -R 777 *
1 ответ
Легко сделать, это прикоснуться к файлу, чтобы отследить самое последнее время обработки, и сказать find
ограничить себя содержанием, более новым, чем этот файл.
Чтобы сохранить прежнюю семантику, где мы выполняли два отдельных прохода, завершив все вызовы jpegoptim
в одном режиме, прежде чем перейти к другому:
#!/bin/bash
extra_args=( )
[[ -e last-scan ]] && extra_args=( -newer last-scan )
find . -name '*.jpg' "${extra_args[@]}" -exec jpegoptim --strip-all '{}' +
find . -name '*.jpg' "${extra_args[@]}" -exec jpegoptim --all-progressive '{}' +
touch last-scan
В качестве альтернативы рассмотрим:
#!/bin/bash
extra_args=( )
[[ -e last-scan ]] && extra_args=( -newer last-scan )
find . -name '*.jpg' "${extra_args[@]}" \
-exec sh -c 'jpegoptim --strip-all "$@"; jpegoptim --all-progressive "$@"' _ '{}' +
touch last-scan
В этом последнем подходе мы делаем только один find
передать, а затем передать каждый пакет файлов в оболочку, которая отвечает за запуск jpegoptim
в каждом режиме по очереди для этой партии.
Наконец: если jpegoptim
безопасно для одновременного использования, вы можете сделать следующее:
#!/bin/bash
extra_args=( )
[[ -e last-scan ]] && extra_args=( -newer last-scan )
find . -name '*.jpg' "${extra_args[@]}" \
-exec jpegoptim --strip-all '{}' + \
-exec jpegoptim --all-progressive '{}' +
touch last-scan
Здесь у нас есть один find
передать непосредственно, начиная обе копии jpegoptim
; риск здесь в том, что если jpegoptim --strip-all
а также jpegoptim --all-progressive
не может безопасно работать с одним и тем же файлом одновременно, это может вести себя плохо.