繁体   English   中英

Shell如何在目录中的每个文件上使用命令

[英]Shell how to use a command on every file in a directory

因此,我要做的是在目录内和目录下找到所有常规文件。 对于这些常规文件中的每一个,我都必须为pattern($ ARG)进行egrep,并找出文件的输出是否与模式($ ARG)相匹配,如果匹配则将其添加到计数器中。

到目前为止,我所拥有的是file命令:

 $count = 0
 file *

但是,我在获取egrep&ARG> / dev / null /时遇到了麻烦。 回声$? 运行(file *)中出现的每个文件。

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

问题尚不清楚,但是如果您要查找包含模式的文件数量

grep -l "pattern" * 2>/dev/null | wc -l

会给你的。 来自目录的错误将被忽略。

如果您想递归地做完整的树,包括点文件

grep -r -l "pattern" | wc -l

您可以尝试以下方法:

counter=0
find /path/to/directory/ -type f | \
    while read file
    do
        if grep -i -e -q "$pattern" "$file"
        then counter=$((counter+1))
        fi
    done
echo "$counter"

参见http://mywiki.wooledge.org/BashFAQ/020

counter=0
shopt -s globstar nullglob
for file in **; do
    grep -qiE "$pattern" "$file" && ((counter++))
done
echo "$counter"

如果要包括隐藏文件,请添加shopt -s dotglob

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM