以前找到了一个把文件由gbk-utf8转换的脚本,转换文件是没有问题的,但是如果参数给一个目录就失败。我就自己修改了一下脚本,我只是去掉了一句而已。脚本如下,我加了注解:
#!/bin/sh
##
## convert file from GB2312 to UTF-8
##
path="$1"
unset opt
if [ "$2" = "force" ]; then
opt="-c -s"
fi
#如果参数不存在
if [ -z "$path" ]; then
echo "nUsage: $0 <file or dir>n"
#如果参数存在但是参数指定的文件不存在
elif [ ! -e "$path" ] ; then
echo "nERROR: destination: $path does not exist.n"
fi
#如果参数存在而且是一个文件
if [ -f "$path" ] ; then
echo "Converting $path (gbk --> utf-8) ... "
#使用file命令查看文件类型,使用gerp -q忽略输出
#如果文件类型包含utf-8
if file "$path"|grep -q UTF-8 >/dev/null ; then
echo "Already converted"
#如果不包含utf-8
else
iconv -f gbk $opt -t utf-8 "$path" > /tmp/$$.tmp
if [ $? -eq 0 ] ; then
echo "Success"
mv -f /tmp/$$.tmp "$path"
else
echo "Failed"
fi
fi
#如果参数存在而且是一个目录
elif [ -d "$path" ] ; then
#path=`echo "$path/"|sed 's//'`
find "$path" -path "$path.*" -prune -o -type f -print|while read i
do
dir=`dirname $i`
file=`basename $i`
echo "Converting $dir/$file (gbk --> utf-8) ..."
iconv -f gbk -t utf-8 -c "$i" > /tmp/$$.tmp #2>/dev/null
if [ $? -eq 0 ] ; then
echo "Success"
mv -f /tmp/$$.tmp "$i"
else
echo "Failed"
fi
done
fi
我把这句话去掉了 #path=echo "$path/"|sed 's//'
,就ok了。