#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
опция дает вам время последнего изменения.