パソコン悪戦苦闘記録

空白混じりのフィル名から空白除去~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
名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「Ubuntu」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事