Shammer's Philosophy

My private adversaria

文字コードをまとめて変換するスクリプト

仕事でとあるログを確認することがあるのだが、そのログがなぜかUTF-16LEで書かれている。UTF-16LEだと、cygwingrepで引っかかってくれないので、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

とりあえず良さそうだ。