繁体   English   中英

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

[英]Recursion in a linux file search - Bash script

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

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

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

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

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

试试这个,然后您就可以将其处理到更大的脚本中(无论它做什么)。

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

您实际上不需要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" *

暂无
暂无

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

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