文字コードをまとめて変換するスクリプト
仕事でとあるログを確認することがあるのだが、そのログがなぜかUTF-16LEで書かれている。UTF-16LEだと、cygwinのgrepで引っかかってくれないので、iconv を使って1つずつUTF-8に変換していたが、数が多いとやってられない。そこで過去(2008/07/31)に作成したスクリプトを参考に作ってみた。
#!/usr/bin/sh ls > iconv_targets.txt count=0 while read line; do ARRAY[$count]=$line count=`expr $count+1` done < iconv_targets.txt i=0 ORIGINAL_ENCODE=UTF-16LE TARGET_ENCODE=UTF-8 while (( $i < $count )) do LOG_FILE_NAME=${ARRAY[$i]} TEMP_LOG_FILE=$i.TMP mv $LOG_FILE_NAME $TEMP_LOG_FILE iconv -f $ORIGINAL_ENCODE -t $TARGET_ENCODE $TEMP_LOG_FILE > $LOG_FILE_NAME rm $TEMP_LOG_FILE i=`expr $i + 1` done rm iconv_targets.txt
適当な名前で保存して、ログの保存されたディレクトリへ移動し、このスクリプトを実行する。こんな感じ。
# cd $LOG_DIRECTORY # ./ThisScript.sh
とりあえず良さそうだ。