1

我需要进行一个涉及项目递归的 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
4

3 回答 3

2

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

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

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

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

试试这个,然后你可以把它变成你更大的脚本(不管它做什么)。

于 2013-10-15T14:33:07.277 回答
2

TL;博士

不要使用递归。它可能有效,但它比必要的工作更多;Bash 没有尾调用优化,也不是函数式编程语言。只需将find与正确的参数集一起使用即可。

调用 Find 的参数化 Bash 函数

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

示例输出

确保正确引用,尤其是在使用诸如*or之类的通配符时?。例如:

$ find_name /etc 'pass?d'
/etc/passwd
/etc/pam.d/passwd
于 2013-10-15T14:38:05.717 回答
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" *
于 2013-10-15T14:32:50.450 回答