zzgzyyz 发表于 2018-8-19 10:30:39

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

  做毕业设计,在将windows上的jsp网页移植到linux环境中时,发现一个个的转换编码及修改默认编码类型太慢,写此脚本进行尝试文件遍历~
  好久不写,手生了。
  


[*]#!/bin/bash
[*]#
[*]#
[*]SPATH="/root/chengji/WebRoot"
[*]DPATH="/web"
[*]
[*]# 函数开始部分
[*]CYCLING(){
[*]filelist=`ls -1 $SPATH`
[*]
[*]for filename in $filelist ; do
[*]    if [ -f $filename ] ; then
[*]      echo Filename:$filename
[*]      /usr/bin/iconv -f GBK -t UTF-8$SPATH/$filename -o$DPATH/$filename
[*]      #cp -pv $SPATH/$filename$DPATH/$filename 该句为前期便利效果测试
[*]      sed-i-e's/gb2312/UTF-8/g'-e 's/GB2312/UTF-8/g'$DPATH/$filename
[*]    elif [ -d $filename ] ; then
[*]      DPATH=$DPATH/$filename
[*]      mkdir -pv $DPATH
[*]      cd $filename
[*]      SPATH=`pwd`
[*]
[*]    # Next for recurse 如果遇到目录进行自我调用。。。实现深层遍历
[*]      CYCLING
[*]
[*]    # Next Usag: basename dirname
[*]      DPATH=`dirname $DPATH`
[*]      SPATH=`dirname $SPATH`
[*]      cd $SPATH
[*]    else
[*]      echo "File $SPATH/$filename is not a common file.Please check."
[*]    fi
[*]done
[*]}
[*]
[*] # 命令开始部分
[*]cd $SPATH
[*]CYCLING
[*]echo "All Done."
  当然,上面的代码由于使用了函数循环调用,显的很臃肿。下面来一种简单的方法,find一下:

[*] #/bin/bash
[*] #Auth: Mo
[*] #Desc:
[*] #
[*]SPATH="/root/chengji"
[*]DIR=WebRoot
[*]DPATH="/web"
[*]
[*] find ${DIR}   -type d-exec mkdir -pv ${DPATH}/{}\;
[*]
[*] find ${DIR}-type f -execiconv -f GBK -t UTF-8{} -o${DPATH/{}\;
[*]
[*]echo "The file Next Listed is not a common file or directory ,please check."
[*]find${DIR}! -type f-a! -type d -ececls -l {} \;
[*]
[*]find$DPATH -type f -exec sed-i-e's/gb2312/UTF-8/g'-e 's/GB2312/UTF-8/g'{} \;
[*]
[*]echo ' '
[*]echo "All Done."
  

  

  




页: [1]
查看完整版本: shell 对一个目录树的遍历及遍历文件处理