2016-03-05 3 views
1

Я хотел написать сценарий, который запускает некоторый код при изменении файла (что означает, что содержимое изменяется или файл перезаписывается файлом с тем же именем) в определенном каталоге (или в подкаталог). При запуске моего кода и изменении файла он, кажется, запускает его дважды каждый раз, так как я получаю выход эха дважды. Есть что-то, чего я не хватает?inotifywait не работает должным образом

while true; do 
    change=$(inotifywait -e close_write /home/bla) 
    change=${change#/home/bla/ * } 
    echo "$change" 
done 

Также он ничего не делает, когда я что-то меняю в подкаталоге указанного каталога.

outpoot выглядит следующим образом после того, как я изменить файл в указанном каталоге:

Setting up watches. 
Watches established. 
filename 
Setting up watches. 
Watches established. 
filename 
Setting up watches. 
Watches established. 

ответ

1

Я не могу воспроизвести, что сценарий выводит сообщение дважды. Вы уверены, что не запускаете его дважды (в фоновом режиме)? Или вы используете редактор для изменения файла? Некоторые редакторы помещают резервный файл рядом с отредактированным файлом, пока файл открыт. Это объясняет, что вы видите два сообщения.

Для просмотра рекурсивного каталога необходимо пройти опцию -r до inotifywait. Тем не менее, вы не должны запускать его в супербольшем дереве файловой системы, так как количество часов inotify ограничено. Вы можете получить лимит в вашей системе через

cat /proc/sys/fs/inotify/max_user_watches 
+0

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

+0

Как изменить файл? с редактором? – hek2mgl

+0

Я также добавил параметр move_to. Когда я перезаписываю его, он запускается один раз, что и нужно. Проблема заключается только в том, когда я изменяю содержимое файла. – craaaft