迭代遍历目录后,尝试查找文件中的事件。 (Bash脚本)

时间:2013-10-02 17:33:55

标签: bash file

我是Bash Scripting的新手,我想制作一个脚本,该脚本将遍历搜索子目录的目录并进入其中以搜索可能位于前面提到的子目录中的文件中的特定字符串。

我目前遇到的问题实际上是第二部分。我试图在当前子目录中逐个访问所有文件,但它只是无法正常工作。这可能是一个愚蠢的问题,但由于我是新手,我发现自己无法找到解决问题的方法。这是代码:

if [[ $1 != "--help" ]]; 
then
    echo "counting results for string: "$1>results.txt
    let total=0

    for dir in */
    do
        if [[ -d $dir ]]; 
        then
            echo "directory: "$dir>>../results.txt
            let dirtotal=0
            cd $dir

            for i in */
            do
                if [[ -f $i ]]; 
                then
                    #look in the file i and count the number of occurrences
                    let result=`grep -c $1 $i`
                    echo $i": "$result
                    let dirtotal=$dirtotal+$result
                fi
            done

            echo "directory total: "$dirtotal>>../results.txt
            let total=$total+$dirtotal

            cd ..
        fi

    done

    echo "total: "$total>>results.txt

    exit 0

else
    display_error
    exit 1
fi

当为...做...完成循环时,会出现问题。

感谢。

2 个答案:

答案 0 :(得分:0)

更改

for i in */

为:

for i in *

以便除了子目录之外还匹配文件。

此外,您应该引用所有变量,以防它们包含空格或通配符。

答案 1 :(得分:0)

您可以使用'find'查找文件(-type f),然后在里面搜索字符串。请注意,双引号约为1美元,使用单引号将无效。 对于在stdout上传输的每个文件名,xargs将执行一次给定的命令。 print0用空字符分隔匹配,然后指示xargs读取-0选项以null分隔的行。

find /your/dir -type f -print0 | xargs -r0 grep "$1" | tee -a result.txt