linux bash находит, если не выполняется

#linux #bash #if-statement #event-handling

#linux #bash #if-оператор #обработка событий

Вопрос:

Мне нужно создать скрипт bash для запуска другой команды сценария, если ни один из файлов в каталоге не был создан в течение 30 минут.

Я не уверен в нужном мне коде, но он должен найти и выполнить, если не соответствует. —

найти /folder/to/watch/* если -не 30 минут -exec fixscript.sh или что-то в этом роде?

При запуске скрипта я хочу, чтобы он проверял файлы в папке, если файл не был создан в течение последних 30 минут, затем для запуска fixscript.sh

Заранее спасибо

Ответ №1:

Я не думаю, что это можно объединить в один оператор find. Следующее будет работать, с оговоркой, что если файл будет изменен, он будет обнаружен как «новее 30 минут».

 if [ `find /folder/to/watch -mmin -30 | wc -l` -eq 0 ]; then
    /path/to/fixscript.sh
fi
  

Linux / Unix не имеет независимого атрибута создания файла. Однако в некоторых файловых системах он может быть, но к нему нельзя получить доступ из оболочки без кода на c и вызова stat() . При этом используется временная метка «измененный файл», которая изменяется не только при создании файла, но и при редактировании файла.

Ханну

Комментарии:

1. find /folder/to/watch -mmin -30 | grep -q '.*' || fixscript.sh было бы более эффективно. Нет необходимости видеть, сколько результатов find выдает; нам просто нужно определить, производит ли он что-нибудь или нет.

2. if [[ -z "$(find ... -print -quit)" ]]; then fixscript.sh; fi также было бы нормально; ограничение вывода find одной строкой позволяет просто захватить это и проверить, является ли его вывод пустым или нет.

Ответ №2:

В Linux у вас нет метаданных для времени создания, но только для времени последнего изменения, последнего изменения состояния файла и последнего времени доступа.

Вы можете сделать:

 if test ! [`find "your_file" -mmin  30`]
then
    `path/to/your/script.sh`
fi
  

-mmin опция дает вам время последнего изменения.