В изменениях inotifywait man указано следующее
-r, --recursive Смотреть все подкаталоги любых каталогов, переданных в качестве аргументов. Часы будут настроены рекурсивно на неограниченную глубину. Символические ссылки не проходятся. Также будут отслеживаться вновь созданные подкаталоги.
Предупреждение. Если вы используете эту опцию во время наблюдения за корневым каталогом большого дерева, установление всех наблюдателей inotify может занять довольно много времени, и в это время события не будут получены. Кроме того, поскольку для каждого подкаталога будет установлено по одному наблюдателю inotify, возможно, будет достигнуто максимальное количество наблюдателей inotify на пользователя. Максимальное значение по умолчанию — 8192; его можно увеличить, написав в /proc/sys/fs/inotify/max_user_watches.
Я понимаю, что это означает, что каждый раз, когда вызывается inotifywait
, возникает задержка для больших каталогов. Поэтому постоянный мониторинг большого каталога с помощью функции мониторинга, подобной этой
inotifywait -m /home/user/Documents
более эффективен, чем ручной цикл по каталогу (из примера на справочных страницах)
while inotifywait /home/user/Documents; do
#Do Something for each file change
done
так как на каждой итерации цикла while вам нужно снова настроить inotifywait. Но с первым вариантом я не могу выполнить на основе возврата. В идеале мне нужна функция обратного вызова, например
inotifywait -m --callback ./callback.sh /home/user/Documents
поэтому callback.sh
вызывается каждый раз с возвращаемым значением inotifywait
. Как бы я это реализовал?