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

#!/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实现递归列目录及对文件的处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值