bashでファイルエンコードの一括変換

Table of Contents

公共用水域水質測定データ処理で必要になり,bashでファイルエンコードをsjis CRLFからutf-8 LFに一括変換するスクリプトを作りました.年号でディレクトリが分けられ,各ディレクトリには複数のsjis CRLF のcsvファイルが存在しているとき,これらをutf-8 LFに一括変換することを想定しています.元のファイルのエンコードはこれ以外でも大丈夫だと思います.
[cc]
### 以下のディレクトリ構造を仮定 ###
./src/
./1971/*.csv
./1972/*.csv
...
./2016/*.csv
[/cc]
このとき,年号が連続していることを前提とすると,1971年から2016年までのファイルのエンコードを以下のスクリプトto_utf8.shで一括変換できます.
[cc]
### ./src/to_utf8.sh の中身 ###
for year in {1971..2016}; do
pushd ../${year}/
find . -name "*.csv" -print0 | xargs -0 nkf -w --overwrite
find . -name "*.csv" -print0 | xargs -0 nkf -d --overwrite
popd
done
[/cc]
このスクリプトの実行はshではなく,. で行います.subシェルの問題です.
[cc]
$ cd ./src ### scriptの存在するディレクトリへ移動
$ . to_utf8.sh ### sh to_utf8.sh では動かない
[/cc]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください