⇒ こちらの記事をご覧ください。
試行錯誤を重ね、完成したシェルスクリプトは次のとおりです。
■複数ファイルの文字コード一括変換スクリプト
#!/bin/bash
for myf in ~/kiroku_mail/dai1/*.txt
do
newf=$(basename ${myf})
iconv -f iso-2022-jp -t UTF-8 ${myf} > ~/afterconv/${newf}
done
このスクリプトの中味に関する説明は、できれば近いうちに、記事にまとめたいと思っています。
さて、このスクリプトの実行に当たって、実は、一つ大きな障害がありました。
対象のテキストファイルのファイル名すべてに、空白(スペース)が含まれていたことです。
しかも、その空白は、1つだけとは限らない上に、その位置もバラバラです。
これでは、上記スクリプトは実行できません。特に、basenameコマンドがうまく実行されません。
(ちなみに、basenameコマンドは、ディレクトリ名とファイル名で構成されるパス名から、ディレクトリ部分を除き、ファイル名だけを取得するというものです。)
ファイル名に空白が混じっているとは、厄介なことです。さてさてどうしたものかと困惑していたら、この問題の解決策を提示してくれているWebサイトが見つかりました。そこに提示されてる方法を、そっくりそのまま利用させていただきました。いやぁ、ありがたいことです。本当に助かりました。
その方法とは、findコマンドとrenameコマンドを使って、次のとおり記述したものです。
$ find . -name "* *" | rename 's/ /_/g'
これによって、カレントディレクトの中から、空白が入っているファイル名を探し出し、空白を「_」(アンダーバー)に置換してくれます。実に見事なワンライナーです。
Ubuntuにおいては、renameの書式は、
rename 's/(置換対象文字列)/(置換後文字列)/g' (対象ファイル名)
となります。
renameコマンドの解説は、
⇒ こちらの記事をご覧ください。
これによって、文字コード変換の一括変換スクリプトを実行する障害が、きれいさっぱりなくなりました。そして、無事に文字コード変換の処理が完了しました。
有用な情報を呈示してくれている上記サイトには、つくづく感謝しています。
それでは、また次の記事で
■■■■ goosyun ■■■■
最近の「Ubuntu」カテゴリーもっと見る
最近の記事
カテゴリー
バックナンバー
人気記事