在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
用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 这样给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 } |
请发表评论