[英]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}*"
试试这个,然后您就可以将其处理到更大的脚本中(无论它做什么)。
不要使用递归。 它可能有用,但是比必要的工作还多。 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
您实际上不需要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.