shell脚本递归遍历目录及子目录的例子分享
shell脚本递归遍历目录及子目录的例子分享
发布时间:2016-12-28 来源:查字典编辑
摘要:用shell写的递归遍历目录的脚本,脚本实现递归遍历指定目录,打印目录下的文件名。实例1:复制代码代码如下:#!/bin/shfunctio...

用shell写的递归遍历目录的脚本,脚本实现递归遍历指定目录,打印目录下的文件名。

实例1:

复制代码 代码如下:

#!/bin/sh

function scandir() {

local cur_dir parent_dir workdir

workdir=$1

cd ${workdir}

if [ ${workdir} = "/" ]

then

cur_dir=""

else

cur_dir=$(pwd)

fi

for dirlist in $(ls ${cur_dir})

do

if test -d ${dirlist};then

cd ${dirlist}

scandir ${cur_dir}/${dirlist}

cd ..

else

echo ${cur_dir}/${dirlist}

fi

done

}

if test -d $1

then

scandir $1

elif test -f $1

then

echo "you input a file but not a directory,pls reinput and try again"

exit 1

else

echo "the Directory isn't exist which you input,pls input a new one!!"

exit 1

fi

实例2:递归读取目录及其子目录

复制代码 代码如下:#! /bin/bash

function read_dir(){

for file in `ls $1`

do

if [ -d $1"/"$file ] //注意此处之间一定要加上空格,否则会报错

then

read_dir $1"/"$file

else

echo $1"/"$file

fi

done

}

#测试目录 test

read_dir test

这样给test.sh加上执行权限即可执行

复制代码 代码如下:chmod +x test.sh

sh test.sh

到此即可通过传递参数来读取目录文件了。

实例3:

复制代码 代码如下:

递归实现各个子目录孙目录......

#!/bin/bash

#modify.func

doit() //处理当前目录下的非目录文件,忽略目录文件

{

oldname=`ls | grep "$1$"`

for name in $oldname

do

if [ -d "$name" ]

then :

else

basename=`echo $name | awk -F "." '{print $1}'`

newname="$basename$2"

echo -e "$PWD/$namett$newname"

mv $name $newname

count=`expr ${count} + 1`

fi

done

return 0

}

do_recursive() //从当前目录开始,递归处理各目录

{

doit $1 $2

for filename in `ls`

do

if [ -d "$filename" ]

then

cd $filename

do_recursive $1 $2

cd ..

fi

done

return 0

}

modify() //处理当前目录,并报告结果,这个相当于主函数,也可以直接调用do_recursive

{

PARAMS=2

if [ $# -ne $PARAMS ]

then

echo "usage: mv_to .suf1 .suf2"

return 1

fi

count=0

do_recursive $1 $2

echo "complete! $count files have been modified."

return 0

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新linuxshell学习
热门linuxshell学习
脚本专栏子分类