好吧,这让我有点抓狂。
我正在尝试查看一组子目录中的文件数量。
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 规范)。