1

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"
4

1 回答 1

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"
于 2016-04-19T07:45:32.340 回答