小实验---采用iconv命令对目录文件进行递归式字符编码转换的shell脚本
来源:互联网 发布:java软件开发简历 编辑:程序博客网 时间:2024/06/05 22:35
前面提到了中文编码文件在vim中显示乱码问题的解决办法,但是经过代码编译运行后发现,调试过程中的输出也会乱码,上面解决办法没有从根本上解决问题。看来还是要进行编码的转换。
查了下,字符编码转换在linux下有命令iconv,可以方便的从指定的编码方式转到另一个编码方式,c语言有相应的函数进行转码。
但是我们在网上下载的源码学习时,往往有很多目录,每个目录下有多个文件,并且目录下面也可能有目录呢。如果要是在模拟终端中调试代码时一个一个转,那得多麻烦啊。想想前面我学过shell脚本的东西,正好这里自己可以捣鼓一个shell脚本完成这个工作。
其实这个问题主要要解决目录遍历啦,应该可以用递归函数来解决。但是想想递归的话似乎会用到栈,实现起来应该挺占系统资源的,记得用到的好几个命令,rm,cp,等都有-R选项,即递归地操作,也不知道这些程序中是怎么比较好地来进行目录遍历的,现在想不到什么比较好的办法,那就先用递归函数来作吧!
下面是经过几个小时,其中包含相关命令复习和调试后的成果(无奈对命令不是很熟,花了太多时间):
#!/bin/bash# usage: fconv type1 type2 dir# this script is used to convert file coding from type1 to type2function handleFile(){ echo "i am in handlefile!" nameparts[1]=`echo $1 | cut -d '.' -f 1` nameparts[2]=`echo $1 | cut -d '.' -f 2` echo ${nameparts[1]} echo ${nameparts[2]} tname="${nameparts[1]}_$totype.${nameparts[2]}" iconv -f $fromtype -t $totype $1 -o $tname rm $1}function handleDir(){ nmlist=`ls -l $1 | awk '{print $9}'` if [ -d $1 ]; then cd $1 fi for fname in $nmlist do echo $fname if [ -f "$fname" ]; then echo "i will enter into handlefile!" handleFile $fname elif [ -d "$fname" ]; then echo "i will enter into handledir" handleDir $fname else echo "something must be wrong!" fi done cd ..}export fromtype=$1export totype=$2dir=$3if [ -e $3 ]; then handleDir $3else echo "input dir or file do not exist!" exit 0fi其中主要采用了ls -l 命令结合awk命令,取第9个字段,获得当前文件夹下的文件(或子目录)名称。
然后是编码转换后的输出文件名,我才用了在原文件名的基础上添加"_utf-8"的形式,并且采用文件名中的 "."作为区分标志。因为多数为编程的源代码,如果直接加上后缀的话,容易导致编译器不能识别,所以想了这个办法,其实在前面添加也应该可以,并且处理还简单。这里就用cut命令将文件名称做分割。
最后实验结果用在vim里面用:set fileencoding检测成功。
对了,还有一个问题,遍历目录时要记得cd , 否则因为找不到该文件或者目录而出错。
使用时,输入三个参数,type1, type2, dir(或者单个文件),如 gb2312 utf-8 somepath
对了,由于近期还有其他事情,可能测试还是不是十分彻底。
- 小实验---采用iconv命令对目录文件进行递归式字符编码转换的shell脚本
- Linux中使用iconv命令对文件进行编码转换
- 字符编码的转换iconv
- 结合file和iconv命令转换文件的字符编码类型
- 结合file和iconv命令转换文件的字符编码类型
- Linux下字符编码转换 -- iconv命令
- Linux 命令iconv -字符编码转换工具
- 利用iconv命令进行编码转换
- linux iconv 文件编码转换脚本
- Linux下实用的文件编码转换命令工具iconv
- iconv、mb_convert_encoding字符编码的转换
- PHP iconv()字符编码转换的问题
- 关于iconv字符编码的转换
- bash shell 遍历指定目录下文件 iconv 编码转换
- 得到所有目录与对目录下的文件进行操作的shell脚本
- linux下, 使用iconv命令实现文件目录编码批量转换
- iconv 文件编码转换
- iconv 文件编码转换
- Java垃圾回收工作原理
- Class file collision: A resource exists with a different case错误 Eclipse
- Android开发基础/Java 获取当前的日期及时间
- Java之旅--XML/JSON
- 面向接口编程技术架构图
- 小实验---采用iconv命令对目录文件进行递归式字符编码转换的shell脚本
- iOS应用性能调优的25个建议和技巧
- swift scrollView滑动
- 在Android中不允许Activity里新启动线程访问该Activity里的组件
- asterisk -r 提示 Unable to connect to remote asterisk 的解决方法
- Java中导入、导出Excel
- 简便使用jQuery-源码阅读全局架构设计的理解
- 二倍角公式
- 【JAVA线程】SwingWorker的用法