/ Shell

Shell实现批量转换文件编码

需求:将一个目录下的所有PHP文件编码从ANSI转为UTF8,包括子目录下的文件。

分析:如果文件数量比较少,可以使用windows下的notepad++等工具一个个转换,但是这次文件数量较多,只能采取自动化处理。

实现:

1.复制文件夹结构

!/bin/bash function ergodic(){ for file in ls $1 do if [ -d $1"/"$file ]; then p=$1"/"$file newp=${p/old/new} #替换路径为新文件夹 mkdir $newp ergodic $1"/"$file fi done } INIT_PATH="old" #旧文件夹 mkdir new #新文件夹 ergodic $INIT_PATH

2.使用iconv实现编码转换

!/bin/bash function ergodic(){ for file in ls $1 do if [ -d $1"/"$file ]; then ergodic $1"/"$file else local path=$1"/"$file local name=$file if [ ${file##*.} = php ]; then #如果文件后缀是php则转换编码 newpath=${path/new/new} echo $newpath iconv -f MS-ANSI -t UTF8 $path -o $newpath #从ANSI转为UTF8 fi fi done } INIT_PATH="old" ergodic $INIT_PATH

PS:iconv所能支持的编码列表可以用iconv -l查看

Shell实现批量转换文件编码
Share this