Shell 递归查找文件

时间:2022-07-26
本文章向大家介绍Shell 递归查找文件,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Shell 编程 - 查找文件

实现一个脚本,可以在指定的目录下查找某个文件/目录.

  • 如果找到该文件/目录,显示其完整路径名
  • 如果找到多个文件,则每个文件名都显示
  • 命令格式如下:
  • SCRIPT_NAME SEARCH_ON_DIR SEARCH_FILENAME

思路:采用递归查找文件,$2表示输入第二个参数,chmod +x xxx.sh加执行权限,最后./xxx.sh运行就好

#! /bin/bash
#getFile判断传递的字符串$filename,是否包含要检索的字符串$2
#判断方法if [[ $filename =~ "$2" ]];,使用=~。不是赋值位取反的意思。
A="$2"
getFile(){
B="$filename"
if [[ "$B" =~ "$A" ]];then
	echo "find  in:$filename";
else 
	echo  "no exist file in $filename"
fi
}
#append,判断传递的字符串最后一个字符是否是/,如果是则返回,如果不是则加上/并返回。
#${filename: -1}取得参数的最后一个字符
#shell返回字符串:echo输出,函数调用处接收。str=$(append)
append(){
if [ ${filename:-1} == '/' ];then
	echo $filename;
else
	echo $filename'/';
fi
}
#递归打开文件
openf(){
for i in `ls $filename`
do
filename=$(append $filename);
#echo $filename;
if [ -d $filename$i ];then
	filename=$filename$i;
	openf $filename;
	filename=$1;
else
	filename="$filename$i"
	getFile $filename;
	filename=$1;
fi
done
}
#$1目录路径,$2检索的文件名
#$1获得输入给程序的第一个参数
#-e判断是否存在
#-d判断是否是文件夹,是文件夹openf递归打开,是文件getFile判断是否是要找的
if [ -e $1 ];then
	if [ -d $1 ];then
	filename=$1;
	#DIR
	openf $filename;
	else
	#FILE
	getFile $filename;
	fi
	else
	echo 'No Exis PathName';
fi

运行结果: