shell脚本-批量gbk转utf-8

这里写自定义目录标题

背景

原因很简单,当初工程拆分,把老代码的gbk文件原封不动的挪到了新的工程,gradle编译已经指定了options.encoding = “UTF-8” 但是还是会出现gbk乱码导致编译不成功。只怪自己太菜不会用gradle解决,只能退而求其次用shell脚本进行gbk转utf-8.

代码

#!/bin/sh
isEnc() 
 { 
   local temp=`iconv -f $2 $1 1>/dev/null 2>/dev/null && echo 'true'`;
   echo $temp
   
  if [ "$temp" = 'true' ]; then
    return 0;
  fi;
  return -1;
 } 

echo "h.sh directory c"
echo "h.sh directory h"
for file in `find $1 -name "*.$2"`;
do
if  $(isEnc $file gbk); then
    echo convering : $file
    iconv -f GBK -t utf-8 $file > $file.t
    mv $file.t $file
  fi;
   
done    
echo DONE


碰到的问题

一开始简单粗暴地进行GBK转utf-8没想到,会出现utf-8转utf-8的情况导致本来utf-8的文件出现了乱码,后面只能想法子判断下文件编码格式。简单粗暴的在do 循环中判断,却发现local只能在function中使用一次(还是我太菜),只能将判断方法单独封装了。