Linux文件搜索中的递归 - Bash脚本

时间:2013-10-15 14:13:01

标签: linux bash recursion

我需要进行一个涉及项目递归的linux文件搜索。我得到了一些帮助,所以我完全不了解这部分代码。有人可以解释它的含义,并提供一些帮助,如何让用户输入一个关键字,并为此功能在目录中搜索该关键字?谢谢你

#!/bin/bash

lookIn() {
    echo $2
    for d in $(find $1 -type d)
    do
        if [ "$d" != "$1" ]
            echo "looking in $d"
            lookIn $d
        fi
    done
}

lookIn

3 个答案:

答案 0 :(得分:2)

您只需要findfind将遍历整个目录。假设$1指向您要搜索的文件夹:

read -p "Enter file name to find: " KEYWORD
find $1 -type f -name "$KEYWORD"

如果要查找包含关键字的名称,请使用:

find $1 -type f -name "*${KEYWORD}*"

试试这个,然后你可以将它用于更大的脚本(无论它做什么)。

答案 1 :(得分:2)

TL; DR

不要使用递归。它可能有用,但它的工作量超过了必要的水平; Bash没有尾调用优化,它不是函数式编程语言。只需使用正确的参数集 find 即可。

调用查找的参数化Bash函数

find_name() {    
    starting_path="$1"
    filename="$2"
    find "$1" -name "$2" 2>&-
}

示例输出

确保正确引用,尤其是在使用*?等通配字符时。例如:

$ find_name /etc 'pass?d'
/etc/passwd
/etc/pam.d/passwd

答案 2 :(得分:1)

您不需要find进行递归文件搜索。 grep -r(递归)将正常工作。

见下面的脚本:

#!/bin/bash

# change dir to base dir where files are stored for search    
cd /base/search/dir

# accept input from user
read -p "Enter Search Keyword: " kw

# perform case insensitive recursive search and list matched file
grep -irl "$kw" *