shell脚本递归遍历目录及子目录的例子分享

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

用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 isnt 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

}

免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容