怎么用shell写递归遍历目录及子目录的脚本-创新互联

这篇文章主要讲解了“怎么用shell写递归遍历目录及子目录的脚本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用shell写递归遍历目录及子目录的脚本”吧!

创新互联公司于2013年成立,先为尼金平等服务建站,尼金平等地企业,进行企业商务咨询服务。为尼金平企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

用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/$name\t\t$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

}


感谢各位的阅读,以上就是“怎么用shell写递归遍历目录及子目录的脚本”的内容了,经过本文的学习后,相信大家对怎么用shell写递归遍历目录及子目录的脚本这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联网站建设公司,,小编将为大家推送更多相关知识点的文章,欢迎关注!


名称栏目:怎么用shell写递归遍历目录及子目录的脚本-创新互联
本文网址:http://myzitong.com/article/cdissd.html