ls -R 无法递归监视文件(使用 entr)

ls -R 无法递归监视文件(使用 entr)

entr是一个 Linux 包,它接受一个 watch 命令,然后在看到任何文件修改时运行另一个命令。示例:

http://eradman.com/entrproject/

# Rebuild project if sources change
$ ls | entr make

# Rebuild project and run tests if the build was successful
$ ls | entr -s 'make && make test'

我试图从我的项目根目录观察任何文件更改并(重新)运行 bats(一个 bash 测试运行器)。

~/cp/projectName$ ls -R | entr ./node_modules/bats/bin/bats -r ./helpers/tests
  • 触发重新运行的唯一文件修改是项目根目录中的修改。
  • /helpers 和 /helpers/tests 中的文件更改均会被忽略
  • 我尝试过不使用 -R(递归)标志。观察者的行为没有变化。

有没有更好的方法来entr监视子文件夹树中的任何嵌套文件更改?

我可以打开多个终端来查看子文件夹。这会损害我的工作流程,因为屏幕空间不足以容纳所有子文件夹;我必须切换活动的终端选项卡(Lubuntu 20.04)。

答案1

首先,ls不监视任何东西。entr显然是将路径作为输入并监视它们;ls只是一个打印这些路径的工具。碰巧的是,对于当前目录,文件名相当于路径。

其次,如果entr确实需要路径,ls -R则输出将大部分是乱码,因为它将目录名称打印为标题行,然后将文件名打印在其下方,因此路径不适用于entr。您应该改用find:

find | entr ...

相关内容