> shell编程 >

shell对一个目录树的遍历及遍历文件处理





在将windows上的jsp网页移植到linux环境中时,发现一个个的转换编码及修改默认编码类型太慢,写此脚本进行尝试文件遍历~

好久不写,手生了。

 


  1. #!/bin/bash

  2. #

  3. #

  4. SPATH="/root/chengji/WebRoot"

  5. DPATH="/web"

  6.  

  7. # 函数开始部分

  8. CYCLING(){

  9.  filelist=`ls -1 $SPATH`

  10.  

  11. for filename in $filelist ; do

  12. if [ -f $filename ] ; then  

  13.        echo Filename:$filename

  14.        /usr/bin/iconv -f GBK -t UTF-8  $SPATH/$filename -o  $DPATH/$filename

  15.        #cp -pv $SPATH/$filename  $DPATH/$filename 该句为前期便利效果测试

  16.        sed  -i  -e  's/gb2312/UTF-8/g'  -e 's/GB2312/UTF-8/g'  $DPATH/$filename

  17.    elif [ -d $filename ] ; then

  18.        DPATH=$DPATH/$filename

  19.        mkdir -pv $DPATH

  20.        cd $filename

  21.        SPATH=`pwd`

  22.  

  23.    # Next for recurse 如果遇到目录进行自我调用。。。实现深层遍历

  24.        CYCLING

  25.  

  26.    # Next Usag: basename dirname

  27.        DPATH=`dirname $DPATH`

  28.        SPATH=`dirname $SPATH`

  29.        cd $SPATH

  30. else

  31.        echo "File $SPATH/$filename is not a common file.Please check."

  32.    fi

  33.  done

  34. }

  35.  

  36. # 命令开始部分

  37. cd $SPATH

  38. CYCLING

  39. echo "All Done."

当然,上面的代码由于使用了函数循环调用,显的很臃肿。下面来一种简单的方法,find一下:


  1. #/bin/bash

  2. #Auth: Mo

  3. #Desc:

  4. #

  5. SPATH="/root/chengji"

  6. DIR=WebRoot

  7. DPATH="/web"

  8.  

  9. find ${DIR}   -type d  -exec mkdir -pv ${DPATH}/{}  \;    

  10.  

  11. find ${DIR}  -type f -exec  iconv -f GBK -t UTF-8  {} -o  ${DPATH/{}  \;  

  12.  

  13. echo "The file Next Listed is not a common file or directory ,please check."

  14. find  ${DIR}  ! -type f  -a  ! -type d -ecec  ls -l {} \;  

  15.  

  16. find  $DPATH -type f -exec sed  -i  -e  's/gb2312/UTF-8/g'  -e 's/GB2312/UTF-8/g'  {} \;

  17.  

  18. echo ' '

  19. echo "All Done."

(责任编辑:IT)