最近在用ant给java项目打jar包,但是程序运行出来之后,全部乱码,于是想到用Linux的iconv命令给java源文件转码,但是总不能一个一个地转吧,效率太低下了,于是便写了个Linux shell脚本方便以后给项目转码。

小编刚接触Linux shell脚本编程,代码看起来粗糙的话别见怪,还望多多指教,呵呵,什么也不说了,先贴出源代码:

#!/bin/bash

#递归遍历源文件目录进行编码转换

functionitem(){

forpathin$1/*

do

if [ -f $path ]

then

basename=`basename"$path"`;

if echo"begin convert:$basename"| grep"${filtername}"

then

lastpath=${path:$cutlength};

newfilename="${superdir}/${newdirbasename}/${lastpath}";

newfiledirname=${newfilename%/*};

mkdir -p"$newfiledirname";#创建目标文件所在目录

iconv -f $encodefrom -t $encodeto"${path}">"${newfilename}";

fi

else

item $path;

fi

done;

}

dirname="";  #源文件目录

superdir="";  #源文件目录上级目录

dirbasename="";  #源文件目录名

newdirbasename=""i;  #目标目录目录名

cutlength=1;  #源文件目录绝对路径字符串长度

encodeform="";  #源文件编码

encodeto="";  #目标文件编码

filtername="";  #过滤源文件的字符串

while getopts :f:t:d:n:hname#获取命令行参数;getopts命令,要求选项有值的话,选项后面要跟:,第一个:表示getopts会区分invalid option错误和miss option argument错误

do

case$namein

f)

fflag=1;  #参数存在的标记

encodefrom=$OPTARG;;

t)

tflag=1;  #参数存在的标记

encodeto=$OPTARG;;

d)

dflag=1;  #参数存在的标记

dirnameval=$OPTARG;;

n)

nflag=1;  #参数存在的标记

filtername=$OPTARG;;

h)

hflag=1;;  #参数存在的标记

esac;

done;

if [ ! -z $hflag ]  #如果存在 -h 选项则打印出帮助信息并退出脚本

then

echo ;

echo"iconvs --help";

echo"            -d  --dir-source        the dir of -d option will be coverted";

echo"            -f  --encoding-from     the value of -f option is the encoding of sourcefile";

echo"            -t  --encoding-to       the value of -t option is the encoding of destfile";

echo"            -n  --string-filter     it will filter the sourcefile by the value of -n option from sourcedir";

echo ;

exit 1;

fi

if [ -z $fflag ]  #默认源文件编码为gbk

then

encodefrom="GBK";

fi

if [ -z $tflag ]  #默认目标文件编码为utf-8

then

encodeto="UTF-8";

fi

if [ -z $filtername ]  #默认源文件过滤字符串为 .java

then

filtername=".java";

fi

if [ ! -z $dflag ]  #分析源文件目录,合成绝对路径

then

if ["${dirnameval:0:1}"="/"]  #截取从索引0开始的1个长度的字符

then

dirname="$dirnameval";

else

dirname="`pwd`/$dirnameval";

fi

else

dirname="`pwd`";

fi;

dirbasename=`basename"$dirname"`;  #等价于dirbasename=${basename "$dirname"};

newdirbasename="${dirbasename}-${encodeto}";

dirname=${dirname%/};

superdir="${dirname%/*}"; #大括号的扩展参数用法,%表示去除右边最小范围的匹配,这里匹配的是/*,%%表示去除右边最大范围的匹配,#和##用法相同,#去除的是左边的匹配

cutlength=$((${#superdir}+${#dirbasename}+2));

echo"from    dir:$dirname";

echo"to      dir:${superdir}/${newdirbasename}";

echo"from encode:${encodefrom}";

echo"to   encode:${encodeto}";

echo'********************************************************************************';

item"$dirname";  #在这里进行递归遍历转码

echo'********************************************************************************';

用vi编写以上脚本,保存为iconvs.sh(当然你也可以用别的名字),假设保存位置为:/opt/iconvs.sh,接下来

cd  /opt

chmod 755 iconvs.sh

bash iconvs.sh -d 源文件目录 -t 源文件编码 -f  目标文件编码 -n  过滤源文件(与grep命令匹配格式相同)

例:

bash iconvs.sh -d /opt/src -t gbk -f  utf-8 -n .java

该命令会把你的/opt/src目录下的所有包含.java的文件从gbk编码转换为utf8编码,并把转换后的文件按源目录结构存放在/opt/src-utf-8文件夹中

linux java转码_用Linux shell脚本批量转换java源文件编码(支持命令行选项)相关推荐

  1. linux cp源码_为Linux的cp和mv命令添加进度条

    cp和mv可能是大家日常中使用最多的Linux命令之一.但是有一个突出的问题是这两个命令都不会有任何提示信息,这在操作大文件时候只能干等.可能大家对此已经习以为常,但是其实上也有解决解决方法,本文我们 ...

  2. java摩斯密码解密_[代码全屏查看]-摩斯密码转换-JAVA版

    [1].[代码] [Java]代码 import java.util.HashMap; import java.util.Map; import org.apache.commons.lang3.St ...

  3. linux停止jar程序,Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法

    废话不多说了,先给大家上代码,具体代码如下所示: #!/bin/bash cd `dirname $0` CUR_SHELL_DIR=`pwd` CUR_SHELL_NAME=`basename ${ ...

  4. linux启动脚本springboot,Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法

    废话不多说了,先给大家上代码,具体代码如下所示: #!/bin/bash cd `dirname $0` cur_shell_dir=`pwd` cur_shell_name=`basename ${ ...

  5. linux ll以编码格式_在Linux中文件的编码及对文件进行编码转换

    如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8.下面介绍一下,在Li ...

  6. linux脚本调用db2存储过程,LINUX定时执行含有DB2存储过程的SHELL脚本

    <LINUX定时执行含有DB2存储过程的SHELL脚本>由会员分享,可在线阅读,更多相关<LINUX定时执行含有DB2存储过程的SHELL脚本(6页珍藏版)>请在人人文库网上搜 ...

  7. linux脚本查看系统内存,二个linux下查看内存使用情况的shell脚本()

    摘要 腾兴网为您分享:二个linux下查看内存使用情况的shell脚本(),政务易,悦作业,优化大师,王者荣耀等软件知识,以及单向历app,优路教育app,kimoji,开关电源设计软件,皮皮高清影视 ...

  8. Linux编程:命令行选项单横线“-”与双横线“--”的区别

    Linux 命令行中的单横线.双横线,我们称之为命令行选项,命令行选项后面可能会带有参数值. 单横线 单横线选项后面跟的参数必须是单字符参数,一个字符表示一个参数,可以多个参数写在同一个横线后面. t ...

  9. shell脚本批量导出MYSQL数据库日志/按照最近N天的形式导出二进制日志[连载之构建百万访问量电子商务网站]...

    shell脚本批量导出MYSQL数据库日志/自动本地导出MYSQL二进制日志,按天备份[连载之构建百万访问量电子商务网站] 出处:http://jimmyli.blog.51cto.com/我站在巨人 ...

最新文章

  1. 给女友讲讲设计模式——适配器模式(JAVA实例)5
  2. Android中实现滑动翻页—使用ViewFlipper
  3. 程序员面试题精选100题(61)-数对之差的最大值[算法]
  4. boost::mpl模块实现zip_view相关的测试程序
  5. MemoryMonitor内存监视器
  6. Idea 设置Eclipse快捷键(常用)
  7. 11134 - Fabled Rooks
  8. 大数据技术如何提升企业竞争力
  9. linux设备驱动程序的编程思路,Linux设备驱动工程师之路——高级字符设备驱动程序...
  10. 【暴力搜索】[HDU 1016]Prime Ring Problem
  11. 一个小型的中文文本分类系统(项目链接文末)——《ML算法原理和实践》学习笔记
  12. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_17_常用的函数式接口_Function接口中的方法andThen...
  13. 信息论与编码_信道编码
  14. 汉诺塔问题(看完就记住)
  15. 独家百度刷权重全套代码工具教程
  16. 计算机无法备份,无法备份和备份会话失败iTunes问题解决
  17. html5新增哪些属性,html5中新增哪些form属性
  18. 五分钟掌握SEO入门实用优化技巧
  19. python面向对象,烤地瓜应用
  20. C语言32位系统下基本类型数据所占字节数

热门文章

  1. 企业是否真的需要BI?
  2. 怎么将SAP数据传输到其他系统(Transferring Data from SAP to Other Systems)
  3. SAP修改已经释放的请求
  4. 达策— 毕盛财务分析系统
  5. java 实现栈_栈的Java实现
  6. hp 交换机远程连接_使用iLO远程管理HP系列服务器
  7. python3.7安装教程mac_mac中怎么安装python3
  8. oracle12154错误 Linux,关于“EXP-00056: ORACLE error 12154 encountered”的解决方法
  9. phpstudy如何升级php,phpstudy如何升级phpmyadmin?
  10. Python基础教程:函数的可变参数