bash shell 遍历指定目录下文件 iconv 编码转换


前言
最近一直在写php和c代码,好久没动bash脚本,一些命令有些生疏了,今天有个需求要对指定目录下的文件进行字符编码转换,写了个脚本实现了一下

目录结构
/home/wzy/Downloads/execl/

                        |__科学/{1.csv,2.csv,3.csv,4.csv}

                        |__教育/{1.csv,2.csv,3.csv,4.csv}

                        |__生活/{1.csv,2.csv,3.csv,4.csv}

                        |__体育/{1.csv,2.csv,3.csv,4.csv}

需求
遍历指定根目录下的所有文件,进行文件编码的转换

技巧
1.bash shell中for循环的使用
2.iconv字符编码转换工具的使用

脚本代码

#!/bin/bash

#1.变量定义
directory="/home/wzy/Downloads/execl"
f_encoding="utf-8"
t_encoding="gbk"

#2.遍历子目录
for dir in `ls $directory`
do
 if [ -d $directory/$dir ]
 then
  #3.遍历子目录的文件
  for file in `ls $directory/$dir`
  do
   if [ -e $directory/$dir/$file ]
   then
    #4.文件类型转换
    iconv -f $f_encoding -t $t_encoding $directory/$dir/$file -o $directory/$dir/iconv.$file
    #5.删除原始文件
    if [ $? -eq 0 ]
    then
     rm $directory/$dir/$file
    fi
   fi
  done
 fi
done

iconv命令
语法
iconv  -f [encoding]  -t [encoding] [inputfile] -o [outputfile] 
选项
-f : 原文件编码
-t : 需要转换的编码
-o : 指定输出文件

后记
记录这个脚本主要是吃饭前对脚本中绝对路径的使用错误一直没有发现,团队喝酒归来后反而头脑清醒,搞定了,希望对各位看我博客的同学也有所帮助,欢迎交流,一般有留言我都会回复的,共同学习,共同进步!

相关内容