监视命令不适用于使用管道的命令



非常简单/快速的问题,为什么这个命令不起作用?

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'

最新更新