watch 命令不适用于使用管道的命令

The watch command does not work with a command using a pipe

非常simple/quick的问题,为什么这个命令不起作用?

watch ls *.log | wc -l

watch -d ls *.log | wc -l

我正在尝试观察当前目录中文件总数的更新。

如果您想通过管道传输命令并观察它,请在其周围添加引号:

watch "ls | wc -l"

即使这里的问题显然是引用,你也不应该解析命令 ls。计算目录中文件数的规范方法是:

find /path/to/dir -maxdepth 1 -type f -printf "c" | wc -c

这避免了可能包含换行符的有趣名称的问题。

OP 的解决方案将是:

watch 'find . -maxdepth 1 -type f -printf "c" | wc -c'