linux下遞歸讀取文件

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}
    fi
done

}

if test -d 1thenscandir 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 oldnamedoif[d name” ]
then :
else
basename=echo $name | awk -F "." '{print $1}'
newname=”basename 2”
echo -e “PWD/ name\t\tnewnamemv name $newname
count=expr ${count} + 1
fi
done
return 0
}
do_recursive() //從當前目錄開始,遞歸處理各目錄
{
doit 1 2
for filename in ls
do
if [ -d “filename]thencd 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
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章