如果文件存在,停止监视文件夹的更改(bash)

如果文件存在,停止监视文件夹的更改(bash),bash,fswatch,Bash,Fswatch,我正在使用fswatch跟踪对目录的更改,但如果存在某个文件(带有通配符),我希望此过程停止。此特定文件是由另一个进程(正在生成需要跟踪的更改)在备用目录(而不是跟踪目录)中创建的 以下是我试图做的: while [[ $(shopt -s nullglob; set -- "${file_to_check}"; echo $#) -eq 1 ]]; do fswatch "${path_to_the_tracked_directory}" done && echo "Do

我正在使用
fswatch
跟踪对目录的更改,但如果存在某个文件(带有通配符),我希望此过程停止。此特定文件是由另一个进程(正在生成需要跟踪的更改)在备用目录(而不是跟踪目录)中创建的

以下是我试图做的:

while [[ $(shopt -s nullglob; set -- "${file_to_check}"; echo $#) -eq 1 ]]; do
   fswatch "${path_to_the_tracked_directory}"
done && echo "Done"
但是,此脚本不会在出现
${file\u to\u check}
后终止

条件中的复数位是按照以下要求处理通配符:

编辑:

复杂位可简化为:

while [ $(set -- "${path_to_the_file_to_check}"${file_to_check_with_wildcards}; echo $#) -eq 0 ]; do
   fswatch "${path_to_the_tracked_directory}"
done && echo "Done"

一种解决方案是使用
-1/--One event
选项()

代码如下所示:

while [ $(set -- "${path_to_the_file_to_check}"${file_to_check_with_wildcards}; echo $#) -eq 0 ]; do
      fswatch -1 "${path_to_the_tracked_directory}"
done && echo "Done"

一种解决方案是使用
-1/--One event
选项()

代码如下所示:

while [ $(set -- "${path_to_the_file_to_check}"${file_to_check_with_wildcards}; echo $#) -eq 0 ]; do
      fswatch -1 "${path_to_the_tracked_directory}"
done && echo "Done"

你转录的代码不正确。
集合之后需要有一个空格--
另外,双引号模式意味着您可以简单地使用
while![-f“$file\u to\u check”]
——您链接到的代码用于检查通配符是否正好匹配一个文件,而不是零个或多个文件。只有一个静态文件名,没有通配符,这显然是严重的过度使用。@tripleee:谢谢,实际上我的第一次尝试是
,而[!-f“${file\u to\u check}”]
,但它似乎不适用于通配符。如果要在
$file\u中使用通配符进行检查,则不能在其周围使用双引号。@econ:如何使用
fswatch
检测文件更改,因为手册页()建议使用选项
fswatch-o
有关详细信息,请参阅本页。您转录的代码不正确。
集合之后需要有一个空格--
另外,双引号模式意味着您可以简单地使用
while![-f“$file\u to\u check”]
——您链接到的代码用于检查通配符是否正好匹配一个文件,而不是零个或多个文件。只有一个静态文件名,没有通配符,这显然是严重的过度使用。@tripleee:谢谢,实际上我的第一次尝试是
,而[!-f“${file\u to\u check}”]
,但它似乎不适用于通配符。如果要在
$file\u\u检查
中使用通配符,则不能在其周围使用双引号。@econ:如何使用
fswatch
检测文件更改,因为手册页()建议使用选项
fswatch-o
,有关详细信息,请参阅本页。