Shell脚本遍历目录并批量修改文件编码
在将windows上的jsp网页移植到linux环境中时,发现一个个的转换编码及修改默认编码类型太慢,写此脚本进行尝试文件遍历~
好久不写,手生了。
#!/bin/bash
#
#
SPATH="/root/chengji/WebRoot"
DPATH="/web"
#函数开始部分
CYCLING(){
filelist=`ls-1$SPATH`
forfilenamein$filelist;do
if[-f$filename];then
echoFilename:$filename
/usr/bin/iconv-fGBK-tUTF-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`
#Nextforrecurse如果遇到目录进行自我调用。。。实现深层遍历
CYCLING
#NextUsag:basenamedirname
DPATH=`dirname$DPATH`
SPATH=`dirname$SPATH`
cd$SPATH
else
echo"File$SPATH/$filenameisnotacommonfile.Pleasecheck."
fi
done
}
#命令开始部分
cd$SPATH
CYCLING
echo"AllDone."
当然,上面的代码由于使用了函数循环调用,显的很臃肿。下面来一种简单的方法,find一下:
#/bin/bash
#Auth:Mo
#Desc:
#
SPATH="/root/chengji"
DIR=WebRoot
DPATH="/web"
find${DIR} -typed -execmkdir-pv${DPATH}/{} \;
find${DIR} -typef-exec iconv-fGBK-tUTF-8 {}-o ${DPATH/{} \;
echo"ThefileNextListedisnotacommonfileordirectory,pleasecheck."
find ${DIR} !-typef -a !-typed-ecec ls-l{}\;
find $DPATH-typef-execsed -i -e 's/gb2312/UTF-8/g' -e's/GB2312/UTF-8/g' {}\;
echo''
echo"AllDone."