Shell 如何使用命令来处理目录下的每个常规文件

Shell 如何使用命令来处理目录下的每个常规文件

因此,我需要查找目录内及目录下的所有常规文件。对于每个常规文件,我需要使用 egrep 查找模式($ARG),并确定文件的输出是否与模式($ARG)匹配,如果匹配,则计数器加一。

到目前为止我拥有的是文件命令:

$count = 0
file *

但是,我无法让 egrep &ARG > /dev/null/ ; echo $? 运行 (file *) 中出现的每个文件。

我了解文件 * | egrep directory > /dev/null; echo $? 将输出 0,因为它在文件中找到模式“目录”,但在让它循环遍历每个常规文件时遇到了麻烦,因此每次匹配模式时我都可以将一个添加到计数器中。

答案1

我认为这会满足您的要求。本质上,它会创建目录及其下所有文件的列表;然后扫描这些文件,打印任何匹配的文件名;然后计算返回的文件名数量。

count=$(egrep -l "$ARG" $(find . -type f) | wc -l)

find 可能会返回太多文件(您将收到错误“参数列表太长”)。在这种情况下,这种较慢但更可靠的机制将起作用:

count=$(find . -type f -exec egrep -l "$ARG" {} \; | wc -l)

相关内容