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. cd $SPATH 
  37. CYCLING 
  38. 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." 


 


 

 

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