我需要进行一个涉及项目递归的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
答案 0 :(得分:2)
您只需要find
。 find
将遍历整个目录。假设$1
指向您要搜索的文件夹:
read -p "Enter file name to find: " KEYWORD
find $1 -type f -name "$KEYWORD"
如果要查找包含关键字的名称,请使用:
find $1 -type f -name "*${KEYWORD}*"
试试这个,然后你可以将它用于更大的脚本(无论它做什么)。
答案 1 :(得分:2)
不要使用递归。它可能有用,但它的工作量超过了必要的水平; Bash没有尾调用优化,它不是函数式编程语言。只需使用正确的参数集 find 即可。
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" *