linux java转码_用Linux shell脚本批量转换java源文件编码(支持命令行选项)
最近在用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源文件编码(支持命令行选项)相关推荐
- linux cp源码_为Linux的cp和mv命令添加进度条
cp和mv可能是大家日常中使用最多的Linux命令之一.但是有一个突出的问题是这两个命令都不会有任何提示信息,这在操作大文件时候只能干等.可能大家对此已经习以为常,但是其实上也有解决解决方法,本文我们 ...
- java摩斯密码解密_[代码全屏查看]-摩斯密码转换-JAVA版
[1].[代码] [Java]代码 import java.util.HashMap; import java.util.Map; import org.apache.commons.lang3.St ...
- linux停止jar程序,Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法
废话不多说了,先给大家上代码,具体代码如下所示: #!/bin/bash cd `dirname $0` CUR_SHELL_DIR=`pwd` CUR_SHELL_NAME=`basename ${ ...
- linux启动脚本springboot,Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法
废话不多说了,先给大家上代码,具体代码如下所示: #!/bin/bash cd `dirname $0` cur_shell_dir=`pwd` cur_shell_name=`basename ${ ...
- linux ll以编码格式_在Linux中文件的编码及对文件进行编码转换
如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8.下面介绍一下,在Li ...
- linux脚本调用db2存储过程,LINUX定时执行含有DB2存储过程的SHELL脚本
<LINUX定时执行含有DB2存储过程的SHELL脚本>由会员分享,可在线阅读,更多相关<LINUX定时执行含有DB2存储过程的SHELL脚本(6页珍藏版)>请在人人文库网上搜 ...
- linux脚本查看系统内存,二个linux下查看内存使用情况的shell脚本()
摘要 腾兴网为您分享:二个linux下查看内存使用情况的shell脚本(),政务易,悦作业,优化大师,王者荣耀等软件知识,以及单向历app,优路教育app,kimoji,开关电源设计软件,皮皮高清影视 ...
- Linux编程:命令行选项单横线“-”与双横线“--”的区别
Linux 命令行中的单横线.双横线,我们称之为命令行选项,命令行选项后面可能会带有参数值. 单横线 单横线选项后面跟的参数必须是单字符参数,一个字符表示一个参数,可以多个参数写在同一个横线后面. t ...
- shell脚本批量导出MYSQL数据库日志/按照最近N天的形式导出二进制日志[连载之构建百万访问量电子商务网站]...
shell脚本批量导出MYSQL数据库日志/自动本地导出MYSQL二进制日志,按天备份[连载之构建百万访问量电子商务网站] 出处:http://jimmyli.blog.51cto.com/我站在巨人 ...
最新文章
- 给女友讲讲设计模式——适配器模式(JAVA实例)5
- Android中实现滑动翻页—使用ViewFlipper
- 程序员面试题精选100题(61)-数对之差的最大值[算法]
- boost::mpl模块实现zip_view相关的测试程序
- MemoryMonitor内存监视器
- Idea 设置Eclipse快捷键(常用)
- 11134 - Fabled Rooks
- 大数据技术如何提升企业竞争力
- linux设备驱动程序的编程思路,Linux设备驱动工程师之路——高级字符设备驱动程序...
- 【暴力搜索】[HDU 1016]Prime Ring Problem
- 一个小型的中文文本分类系统(项目链接文末)——《ML算法原理和实践》学习笔记
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_17_常用的函数式接口_Function接口中的方法andThen...
- 信息论与编码_信道编码
- 汉诺塔问题(看完就记住)
- 独家百度刷权重全套代码工具教程
- 计算机无法备份,无法备份和备份会话失败iTunes问题解决
- html5新增哪些属性,html5中新增哪些form属性
- 五分钟掌握SEO入门实用优化技巧
- python面向对象,烤地瓜应用
- C语言32位系统下基本类型数据所占字节数
热门文章
- 企业是否真的需要BI?
- 怎么将SAP数据传输到其他系统(Transferring Data from SAP to Other Systems)
- SAP修改已经释放的请求
- 达策— 毕盛财务分析系统
- java 实现栈_栈的Java实现
- hp 交换机远程连接_使用iLO远程管理HP系列服务器
- python3.7安装教程mac_mac中怎么安装python3
- oracle12154错误 Linux,关于“EXP-00056: ORACLE error 12154 encountered”的解决方法
- phpstudy如何升级php,phpstudy如何升级phpmyadmin?
- Python基础教程:函数的可变参数