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 не может безопасно работать с одним и тем же файлом одновременно, это может вести себя плохо.

Другие вопросы по тегам