つれづれ電脳記(日くらしPCに向かひて)

つれづれなるままに、日くらしPCに向かひて、その悪戦苦闘ぶりをそこはかとなく書き付くるおじさん。たまに雑談[管理人:goosyun]

つれづれなるままに、日くらしPCに向かひて、デジタル関係の悪戦苦闘ぶりをそこはかとなく書き付くるおじさんです。
たまに雑談してます。連絡・問い合わせフォームは、ページ最下部に置いています。[著者(運営人):goosyun]

(当ブログには本文中に広告リンクが含まれています。)

空白混じりのフィル名から空白除去~Linuxのrenameコマンド

 先日、大量のテキストファイルの文字コード変換を自動化するシェルスクリプトを作りました。
 
 こちらの記事をご覧ください。

 試行錯誤を重ね、完成したシェルスクリプトは次のとおりです。

複数ファイルの文字コード一括変換スクリプト
 #!/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