Linux下gbk-utf8文件和目录下所有文件转码

以前找到了一个把文件由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了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值