您的位置:首页 > 运维架构 > Shell

Shell脚本01 —— 遍历指定目录,找到指定文件

2015-02-04 17:18 971 查看
#!/bin/sh
cd ~/Documents/workspace

function checkDir(){
for file in `ls $1`
do
if [ -f $1"/"$file ]
then
if [ $file = "R.java" ]
then
echo $1"/"$file
while read LINE
do
if [ ${#LINE} = 55 ]
then
echo $LINE
fi
done < $1"/"$file

fi
elif [ -d $1"/"$file ]
then
checkDir $1"/"$file
else
echo "wrong"
fi
done
}

checkDir .

作为一个程序员,居然不会写脚本,太不给力了。

今天折腾了两个小时,写了一个无比简单的脚本。开启我的写脚本之旅。

今天遇到的问题:

1. 一开始调用方法的时候使用的是

checkDir ./*

checkDir方法中使用:
dir=$1
for file in $dir
...

我想要的效果是,循环指定目录下所有的文件(包括目录)
但是实际运行出来发现,这个写法,只能取一个值。其余的都不循环了。

于是目录还是改成

checkDir .

方法中直接使用ls
for file in `ls $1`

2. 递归目录
一开始在循环中,进入下一层目录,然后列举当前目录

cd $file
checkDir .

但是发现进了一层目录之后回不来了
于是不要进目录,而是直接检查就可以了
checkDir $file

3. 可以递归目录了,但是判断-f、-d失败
echo出来的文件名也是对的,但是就是判断-f、-d一直是false。

百般折腾,最后发现,确实不是文件啊,文件是要指定目录的。

于是用到文件的地方,都改成

$1"/"$file

这样就把上层目录和当前文件名拼起来,凑成了一个完整的路径。-f、-d也能成功判断了。
4. 由于使用 $1"/"$file 拼路径的地方还挺多,于是想着是不是可以把这个路径赋值给一个变量,以后都用这个变量

filepath=$1"/"$file
if [ -f filepath ]
...

但是不知为何,反而不可以了。。。算了,不折腾了,今天有点累了。。。

参考资料:

30分钟玩转Shell脚本编程

Linux通过shell实现递归列目录及对文件的处理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell