轉http://www.jb51.net/article/48832.htm
用shell寫的遞歸遍歷目錄的腳本,腳本實現遞歸遍歷指定目錄,打印目錄下的文件名。
實例1:
複製代碼 代碼如下:
!/bin/sh
function scandir() {
local cur_dir parent_dir workdir
workdir=
if [
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
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
then :
else
basename=echo $name | awk -F "." '{print $1}'
newname=”
echo -e “
count=expr ${count} + 1
fi
done
return 0
}
do_recursive() //從當前目錄開始,遞歸處理各目錄
{
doit
for filename in ls
do
if [ -d “
do_recursive
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
echo “complete! $count files have been modified.”
return 0
}