我正在使用entr来检查是否有新文件添加到某些子目录中,并在发生此类事件时运行命令。如果我有一个包含文件夹的目录:folder
、prefix_folder1
和prefix_folder2
,那么我想监视后两个目录中某个子目录中是否存在新文件,即监视prefix_folder1/subdir
和prefix_folder2/subdir
这是我目前的无限循环方法:
1 #!/bin/bash
2
3 trap "exit" INT # in case of ^C
4 while true
5 do
6 for stage in $(ls '/Users/me/test')
7 do
8 if [[ "$stage" == "prefix"* ]]; then #check for prefix
9 ls -d * /Users/me/test/$stage/subdir | entr -pd echo hey
10
11 fi
12 done
13 done
但是,对于每个目录,脚本都挂在第9行,直到创建新文件为止。例如,如果它处于prefix_folder2/subdir
,则它将不处于echo
〃;嘿"如果在CCD_ 8。
在这种情况下,我对bash for循环的理解是有限的,我不确定应该查找什么关键字来找到解决方案。
我想这就是你想要的:
while true
do
ls -d /Users/me/test/prefix*/subdir | entr -pd echo hey
done
这将一次将要监视的所有目录传递给entr
的单个调用,而不是为每个目录单独调用它。
您不需要在ls
命令中包含*
,因为这也将监视当前目录中的所有文件。