在“watch”中链接命令

在“watch”中链接命令

好吧,这让我有点抓狂。

我正在尝试查看一组子目录中的文件数量。

find . | wc -l正确返回子文件夹和文件的数量。

然而,在手表屏幕中watch 'find . | wc -l'返回。 它返回与双引号或反引号 (`) 相同的值。 watch: find . | wc -l: No such file or directory


这是在一个古老的bash 版本:
GNU bash, version 3.00.16(2)-release (i486-slackware-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.

这也是一个嵌入式设备,因此它运行 busybox ( BusyBox v1.1.0 (2010.06.14-02:47+0000) multi-call binary) 而不是普通的 gnu utils,因此大多数常用工具的大多数开关和功能也不存在。

所以必须考虑到这一点。然而,Linux 安装被烘焙到模块磁盘上,因此没有简单的方法来更新它。

相同的命令 ( watch 'find . | wc -l') 在更新的 Linux 安装上可以正常工作,所以这个问题更多的是关于处理过时的 bash 那么这个确切的代码片段有什么问题(因为它其他地方好像是正确的!)。

答案1

根据您的实现/版本watch,它可能不会启动 shell 来解释命令行,而是运行一个命令,该命令将其自身接收的参数作为参数。因此,在这种情况下,如果您需要它运行 shell 命令行,则需要显式启动 shell,如下所示:

watch sh -c 'find . | wc -l'

另请参阅inotifywait -rm .用于监视目录中活动的命令(如果在 Linux 上)。

另请注意,如果文件名不包含换行符,则find . | wc -l仅返回文件数(不包括条目)。..如果这可能是一个问题,你可以这样做:

find .//. | grep -c //

另请注意,没有名为 的 GNU 或 Unix 实用程序watch。 Linux 工具套件中有一个watch命令,在 busybox 中procps有一个实现。watch在 BSD 上,watch做一些完全不同的事情。watch不是标准命令(不属于 POSIX、Unix 或 LSB 规范)。

相关内容