如果文件存在,则停止观看文件夹以进行更改(bash)

时间:2016-04-19 06:27:14

标签: bash fswatch

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

这是我试图做的事情:

while [[ $(shopt -s nullglob; set -- "${file_to_check}"; echo $#) -eq 1 ]]; do
   fswatch "${path_to_the_tracked_directory}"
done && echo "Done"

但是,在${file_to_check}出现后,此脚本不会终止。

条件中的复杂位是按照Bash check if file exists with double bracket test and wildcards

处理通配符

编辑:

复杂位可以简化为:

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 个答案:

答案 0 :(得分:0)

一种解决方案是使用-1/--one-event选项(https://github.com/emcrisostomo/fswatch/wiki/How-to-Use-fswatch)。

然后代码看起来像:

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"