Выполнение inotifywait
смотреть каталог, и пытающийся исключить все подкаталоги из того, чтобы быть наблюдаемым в то время как не, исключая файлы.
inotifywait -r -q --exclude <pattern> dir/
Что вставить <pattern>
? Руководство для inotifywait
указывает:
--exclude <pattern>
Do not process any events whose filename matches the specified POSIX extended regular expression, case sensitive.
Существует нет -type
отметьте как в find
. Я попробовал (^/)
но это, кажется, исключает все.
Help ценится.
Начиная с --exclude
опция только действует на имена файлов, нет никакого прямого способа сделать это. Вы могли попробовать окольные пути как использование find
для печати названия всех каталогов:
inotifywait --exclude "echo -n (;$(find . -maxdepth 1 -mindepth 1 -type d -printf '%P|');echo )" .
Примечание, которое я не определил -r
, так как это заставит недавно созданные подкаталоги наблюдаться также.
Это могло бы порвать с некоторыми специальными символами.
<час>Вы могли также попробовать:
find . -maxdepth 1 -mindepth 1 -type d -printf '@%P\n' > list_of_directories
inotifywait --fromfile list_of_directories .
inotifywait
исключит любые файлы или папки в list_of_directories
, которые начинаются @
(все они делают).
, Если Вы используете inotifywait
с рекурсивной опцией, позвольте find
список все вложенные подкаталоги также путем удаления -maxdepth
ограничение (также относится к первой команде):
find . -mindepth 1 -type d -printf '@%P\n' > list_of_directories
inotifywait --fromfile list_of_directories . -r
Эти -mindepth
сохраняется для предотвращения find
от соответствия .
, и таким образом, исключая текущий каталог также.
Просто используйте --exclude '/\..+'
. Это игнорирует все файлы, которые запускаются с точки.
(.+
часть - то, так, чтобы она не исключала Вашу основную папку).
inotifywait
только подкаталоги проверок из-за параметра -r
.
Вызов это без , что параметр и это не будут наблюдать подкаталогов.