Так что в моем скрипте оболочки bash я запускаю его через цикл for. Внутри цикла for я использую find "$myarray[i]" >> $tmp
для поиска определенного каталога каждый раз через цикл. Иногда он находит переменную в myarray[i]
, а иногда ее нет. Когда он найдет что-то в myarray[i]
, я хочу, чтобы он выполнил echo "<br>" >> $tmp
. Есть ли способ проверить, изменился ли $tmp
после выполнения строки find
, так что я знаю, когда следует выполнить линию echo "<br>" >> $tmp
?Идентификация, когда файл был изменен - Bash
ответ
Я бы хранить выход find
, и если не пусто, эхо разрыв строки:
found=$(find . -name "${myarray[i]}")
if [[ -n $found ]]; then
{ echo "$found"; echo "<br>"; } >> "$tmp"
fi
Если ваша цель состоит в том, чтобы принимать меры, когда событие файловой системы происходит (например, обновление файла или каталога создание), я бы избегал писать настраиваемый цикл опроса. Вместо этого используйте один из нескольких инструментов, созданных специально для этого варианта использования.
Линукс-инструмент «inotify», по-видимому, популярен, и у него есть обертки, такие как инструменты inotify, чтобы упростить вызов из командной строки. Также есть кросс-платформенный пакет Python «сторожевой таймер», инструмент .NET/mono «System.IO.FileSystemWatcher», встроенная утилита OSX «Действия с папкой», «fswatch» и другие.
Легко опрокидывать опрос и трудно правильно обрабатывать такие вещи, как автоматические перезагрузки, необычные имена файлов и ошибки файловой системы. Целевые инструменты были созданы, потому что нет хорошего способа сделать это с помощью (простой) схемы bash.
Неужели команда find найдет несколько вещей или только одну вещь? Если он находит несколько вещей, вы хотите получить '
' после * каждой * вещи, которые он находит, или только после всех вещей, которые он находит? –
Я не думаю, что 'find '$ myarray [i]' 'делает то, что вы думаете. – PSkocik
Включите некоторый (псевдо) код, пожалуйста. – ShellFish