日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2025/3/19 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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文件夾中

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的linux java转码_用Linux shell脚本批量转换java源文件编码(支持命令行选项)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。