2015-06-22 3 views
1

Так что в моем скрипте оболочки bash я запускаю его через цикл for. Внутри цикла for я использую find "$myarray[i]" >> $tmp для поиска определенного каталога каждый раз через цикл. Иногда он находит переменную в myarray[i], а иногда ее нет. Когда он найдет что-то в myarray[i], я хочу, чтобы он выполнил echo "<br>" >> $tmp. Есть ли способ проверить, изменился ли $tmp после выполнения строки find, так что я знаю, когда следует выполнить линию echo "<br>" >> $tmp?Идентификация, когда файл был изменен - ​​Bash

+0

Неужели команда find найдет несколько вещей или только одну вещь? Если он находит несколько вещей, вы хотите получить '
' после * каждой * вещи, которые он находит, или только после всех вещей, которые он находит? –

+0

Я не думаю, что 'find '$ myarray [i]' 'делает то, что вы думаете. – PSkocik

+0

Включите некоторый (псевдо) код, пожалуйста. – ShellFish

ответ

1

Я бы хранить выход find, и если не пусто, эхо разрыв строки:

found=$(find . -name "${myarray[i]}") 
if [[ -n $found ]]; then 
    { echo "$found"; echo "<br>"; } >> "$tmp" 
fi 
1

Если ваша цель состоит в том, чтобы принимать меры, когда событие файловой системы происходит (например, обновление файла или каталога создание), я бы избегал писать настраиваемый цикл опроса. Вместо этого используйте один из нескольких инструментов, созданных специально для этого варианта использования.

Линукс-инструмент «inotify», по-видимому, популярен, и у него есть обертки, такие как инструменты inotify, чтобы упростить вызов из командной строки. Также есть кросс-платформенный пакет Python «сторожевой таймер», инструмент .NET/mono «System.IO.FileSystemWatcher», встроенная утилита OSX «Действия с папкой», «fswatch» и другие.

Легко опрокидывать опрос и трудно правильно обрабатывать такие вещи, как автоматические перезагрузки, необычные имена файлов и ошибки файловой системы. Целевые инструменты были созданы, потому что нет хорошего способа сделать это с помощью (простой) схемы bash.