linux下递归读取文件

来源:互联网 发布:codol过一会就数据异常 编辑:程序博客网 时间:2024/06/05 04:28

转http://www.jb51.net/article/48832.htm
用shell写的递归遍历目录的脚本,脚本实现递归遍历指定目录,打印目录下的文件名。
实例1:
复制代码 代码如下:

!/bin/sh

function scandir() {
local cur_dir parent_dir workdir
workdir=1cd{workdir}
if [ workdir=/]thencurdir=elsecurdir=(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}    fidone

}

if test -d 1thenscandir1
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/bashfunction 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 oldnamedoif[dname” ]
then :
else
basename=echo $name | awk -F "." '{print $1}'
newname=”basename2”
echo -e “PWD/name\t\tnewnamemvname $newname
count=expr ${count} + 1
fi
done
return 0
}
do_recursive() //从当前目录开始,递归处理各目录
{
doit 12
for filename in ls
do
if [ -d “filename]thencdfilename
do_recursive 12
cd ..
fi
done
return 0
}
modify() //处理当前目录,并报告结果,这个相当于主函数,也可以直接调用do_recursive
{
PARAMS=2
if [ # -nePARAMS ]
then
echo “usage: mv_to .suf1 .suf2”
return 1
fi
count=0
do_recursive 12
echo “complete! $count files have been modified.”
return 0
}

0 0