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

时间:2016-04-14 01:05:23

标签: bash shell unix

所以我要做的就是找到目录内和下面的所有常规文件。对于这些常规文件中的每一个,我必须egrep for pattern($ ARG)并找出文件的输出是否与模式($ ARG)匹配,如果是,它将向计数器添加一个。

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

 $count = 0
 file *

然而,我无法获得egrep& ARG> / dev / null /;回声$?遍历从(file *)出现的每个文件。

我理解文件* | egrep目录> / dev / null;回声$?将输出0,因为它找到模式'目录'在文件中,但是无法让它循环遍历每个常规文件,因此每次匹配模式时我都可以向计数器添加一个。

3 个答案:

答案 0 :(得分:1)

问题不明确,但是如果你正在寻找包含模式的文件数量

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

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

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

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

答案 1 :(得分:0)

你可以试试这个:

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"

答案 2 :(得分:0)

请参阅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