前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell 递归查找文件

Shell 递归查找文件

作者头像
glm233
发布2020-09-28 14:48:07
1.8K0
发布2020-09-28 14:48:07
举报
文章被收录于专栏:glm的全栈学习之路

Shell 编程 - 查找文件

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

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

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

代码语言:javascript
复制
#! /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

运行结果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档