2015-03-28 2 views
1

Мне нужен сценарий оболочки, который будет контролировать все папки, указанные в команде , и будет уведомлять пользователя, если в них будет создан определенный файл (имя файл будет считан с клавиатуры).Папки мониторинга с помощью unix bash

Я разрешено использовать простые команды, так что не Inotify ... это то, что мне удалось сделать до сих пор:

#!/bin/bash 
    echo "Please enter a file you want to monitor: " 
    read file_monitor 
    #this is an infinite while 
    while [ 1 ] ; do 
     #using test -e to search for the file 
     test -e $file_monitor && echo "The file has been created!" 
     sleep 5 
    done 

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

+0

Просто «выходите» из сценария, когда ваш файл найден. –

+0

Можете ли вы использовать '[['? Если это так, то просто проверяйте условие while: 'while [[! -f $ file_monitor]]; do ' – mlegge

+0

, пожалуйста, добавьте недостающие' '' и пробелы для 'while'. Пожалуйста, * проверьте * ваш код перед отправкой. –

ответ

0

Для выхода из цикла, используйте break:

test -e $file_monitor && echo "The file has been created!" && break 

Я предпочел бы break первым и echo после цикла, или как @ mkemp6 предложил, непосредственно использовать тест как условие цикла.

Чтобы проверить папки, просто прокрутите их и проверьте файл в каждом из них.

break [n] 
     Exit from within a for, while, until, or select loop. If n is specified, break n 
     levels. n must be ≥ 1. If n is greater than the number of enclosing loops, all 
     enclosing loops are exited. 
+0

спасибо, что решает проблему разрыва :) Теперь мне нужно выяснить, как искать в определенных папках –

0
while ! test -e "$file_monitor"; do sleep 5; done 

Но вы гораздо лучше использовать что-то вроде Inotify контролировать соответствующие каталоги.

+0

Я не могу использовать inotify, потому что это для школьного задания, и теперь моя проблема заключается в том, как искать в папках, заданных в качестве аргументов в командной строке. работать только для текущего каталога –

0
#!/bin/bash 
[email protected] 

for i in $arr; do 
    if [ ! -d $i ] 
     then echo "The parameter $i is no a directory!" 
      exit 1 
    fi 
done 

echo -n "Please give file you want to monitor: " 
read file_monitor 

a=1 

while [ $a -eq 1 ]; do 
    for i in $arr; do 
     cd $i 
     test -e $file_monitor && echo "The file has been created" && a=$((a+1)) 
     cd .. 
    done 
done 

Так что это то, что мне удалось.