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]