バッチ変換ファイルエンコーディング


背景の説明
eclipse環境で開発されたプログラムでは、デフォルトの【プロジェクト】符号化は一般的に【ワークスペース/Workspace】の符号化設定から継承され、具体的な位置は【eclipse】->「ウィンドウ」->「プリファレンス」->「一般」->「ワークスペース」->「テキストファイル符号化」である.もちろん、あるプロジェクトに特に符号化フォーマットを指定することもできます.通常、プロジェクトが開始されると、符号化フォーマットが規定され、以降作成されたすべてのテキストファイルがこのフォーマットで符号化されます.しかし、個々のモジュールがプロジェクト全体の符号化とは異なる場合や、プロジェクトの符号化を全体的に調整する必要がある場合など、事故が発生する可能性があります.この場合、Linuxのiconvを利用して一括変換を行うことができます.
注意:予期せぬ事態が発生しないように、元のファイルをバックアップします.
ファイル拡張子フィルタ
一括変換を行うには、まずファイルフィルタリングを行います.つまり、どのファイルが符号化変換を行う必要があるかを指定します.次の文を使用して、現在のディレクトリとサブディレクトリの下のすべてのファイルの接尾辞を見つけることができます.
$ vdir -R | grep ^- | grep -oE '[.]\w+$' | sort | uniq
.java
.properties

「vdir-R」には、現在のディレクトリとサブディレクトリの下にあるすべてのディレクトリとファイルがリストされます.
『grep^-』ディレクトリの内容をフィルタリング
『grep -oE '[.]w+$'』拡張子以外のコンテンツを削除
『sort』拡張子のソート
『uniq』重複除外
上記のコマンドでフィルタリングした結果、ターゲット拡張子の結果は、'.java'と'.properties'の2種類のファイルしかありません.
ターゲットファイルの配置
上記の例は、どのようなタイプのファイルが変換される必要があるかを判断するのに役立つだけで、実際の作業では状況が変化する可能性があります.私が直面した問題はAbstract以外の先頭を変換し、末尾がUIであることです.JAvaのファイル.まず、次のコマンドでターゲットファイルを見つけます.
$ find -regextype egrep -regex .*UI.java | grep -v Abstract
./base/client/AssessmentLevelEditUI.java
./base/client/AssessmentLevelListUI.java
./base/client/AssessmentPeriodEditUI.java
./base/client/AssessmentPeriodGuidanceEditUI.java
./base/client/AssessmentPeriodListUI.java
./base/client/AssessmentRatioEditUI.java
./base/client/AssessmentRatioListUI.java
./floatingbonus/client/FloatingBonusAssessmentEditUI.java
./floatingbonus/client/FloatingBonusAssessmentListUI.java
./floatingbonus/client/FloatingBonusSclassApplyEditUI.java
./floatingbonus/client/FloatingBonusSclassApplyListUI.java

書式変換
そして『iconv』コマンドでファイルの符号化変換を行い、新しいファイルの拡張子は*.test.オプション-sと-cの使い方に注意してください.
$ iconv --help
Usage: iconv [OPTION...] [-f ENCODING] [-t ENCODING] [INPUTFILE...]
or:    iconv -l

Converts text from one encoding to another encoding.

Options controlling the input and output format:
  -f ENCODING, --from-code=ENCODING
                              the encoding of the input
  -t ENCODING, --to-code=ENCODING
                              the encoding of the output

Options controlling conversion problems:
  -c                          discard unconvertible characters
  --unicode-subst=FORMATSTRING
                              substitution for unconvertible Unicode characters
  --byte-subst=FORMATSTRING   substitution for unconvertible bytes
  --widechar-subst=FORMATSTRING
                              substitution for unconvertible wide characters

Options controlling error output:
  -s, --silent                suppress error messages about conversion problems

Informative output:
  -l, --list                  list the supported encodings
  --help                      display this help and exit
  --version                   output version information and exit

Report bugs to [email protected]

変換コマンド:
$ for file in `find -regextype egrep -regex .*UI.java | grep -v Abstract`; do iconv -s -c -f UTF-8 -t GB2312 $file > $file.test ; done

変換されたファイルのリストは次のとおりです.
$ find . -name *.test
./base/client/AssessmentLevelEditUI.java.test
./base/client/AssessmentLevelListUI.java.test
./base/client/AssessmentPeriodEditUI.java.test
./base/client/AssessmentPeriodGuidanceEditUI.java.test
./base/client/AssessmentPeriodListUI.java.test
./base/client/AssessmentRatioEditUI.java.test
./base/client/AssessmentRatioListUI.java.test
./floatingbonus/client/FloatingBonusAssessmentEditUI.java.test
./floatingbonus/client/FloatingBonusAssessmentListUI.java.test
./floatingbonus/client/FloatingBonusSclassApplyEditUI.java.test
./floatingbonus/client/FloatingBonusSclassApplyListUI.java.test

ファイル置換
最後の一歩は*.testファイルは元のファイルを置き換えます.
$ for file in `find . -name *.test` ; do mv $file ${file/.test/} ; done