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

分类:shell编程 阅读:30247 次

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

好久不写,手生了。


  1. #!/bin/bash

  2. #

  3. #

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

  5. DPATH="/web"

  6. # 函数开始部分

  7. CYCLING(){

  8. filelist=`ls -1 $SPATH`

  9. for filename in $filelist ; do

  10. if [ -f $filename ] ; then

  11. echo Filename:$filename

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

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

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

  15. elif [ -d $filename ] ; then

  16. DPATH=$DPATH/$filename

  17. mkdir -pv $DPATH

  18. cd $filename

  19. SPATH=`pwd`

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

  21. CYCLING

  22. # Next Usag: basename dirname

  23. DPATH=`dirname $DPATH`

  24. SPATH=`dirname $SPATH`

  25. cd $SPATH

  26. else

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

  28. fi

  29. done

  30. }

  31. # 命令开始部分

  32. cd $SPATH

  33. CYCLING

  34. echo "All Done."



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

  1. #/bin/bash

  2. #Auth: Mo

  3. #Desc:

  4. #

  5. SPATH="/root/chengji"

  6. DIR=WebRoot

  7. DPATH="/web"

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

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

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

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

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

  13. echo ' '

  14. echo "All Done."