パソコン悪戦苦闘記録

Linuxで大量のファイルの名前を一括変更~作業自動化

 20年以上昔の大量のメールを、クラウド上のストレージに保存しています。
 当時、会社業務で生じた疑問などを、全国の同じ部署の社員同士で意見交換し、共有したメールです。
 古過ぎて、今となっては役に立たない情報が多いものの、ちょっと読み直してみようと、自宅PCにダウンロードしました。

 当時のメールソフト Outlook Express で送受信したメールなので、拡張子「eml」のファイルです。今は Outlook Express は使っていませんが、現在でも、Outlookなどのメールソフトで開くことができます。
 拡張子「eml」のままでもよいのですが、そのすべてをテキストファイルに変換することにしました。テキストファイルだと、grepコマンドなどでの検索が容易になるからです。
 テキストファイルへの変換といっても、単純です。ファイル名の拡張子部分を、「eml」から「txt」に書き換えるだけです。
 ただし、大量のファイルなので、一つ一つ手作業で書き換えるのは現実的ではありません。そこで、ファイル名変更作業を自動化することにしました。
 
 WindowsのコマンドプロンプトやPowerShellはあまりなじみがなく、VBAを使おうかとも思ったのですが、Linuxを習得中なので、勉強を兼ねてLinux シェルを使うことにしました。
 Web上の情報を参考にすれば、難なくできるだろうと思っていたのですが、これが予想外に苦戦しました。
 どこでつまづいたのか、記録しておきます。





【1】 renameコマンド
 renameコマンドを使えば、複数のファイル名を一括して変更ができるようです。ただ、Ubuntuにおいては、そのコマンドはデフォルトでは入っていません。今後もrenameコマンドを頻繁に使うならば、この際インストールしてもいいのですが、あまり使うことはないような気がします。よって、renameコマンド以外の方法をとることにしました。


【2】 mvコマンド
 mvコマンドは、ファイル移動もできるほか、ファイル名変更にも使えます。
 そこで、mvコマンドを使った、次のシェルスクリプトを作りました(テスト用に作ったスクリプトなので、拡張子「csv」を「txt」に変更するものとなっています。)

 #!/bin/bash 
 for fname in *.csv 
 do 
 mv $fname ${fname%.csv}.txt 
 done 



【3】 改行コード
 上記【2】のスクリプトは、Windows上のサクラエディタを使って作ったので、改行コードが「CrLf」となっていました。
 改行コードが「CrLf」のスクリプトは、Ubuntuではエラーが出て動きません。
 サクラエディタでのファイル保存の際、改行コードを「Lf」とすることで、Ubuntuでも動くようになりました。


【4】 画面更新
 上記【3】の作業によって、エラーは出なくなったのですが、実行後、なぜかファイル名変更ができていません。
 原因が分からず、あれこれやっている中で、いったん別のディレクトリに移動して、また元のディレクトリに戻れば、ファイル名変更ができていました。スクリプト実行によって、ファイル名変更ができているにもかかわらず、画面上の表示に反映されていないだけだったのです。いったん、別ディレクトリに行って、また戻れば、画面更新されて、ファイル名も更新されることが分かりました。


【5】 ファイル名の制限
 上記【2】のスクリプトは、テスト環境ではまともに動きます。
 ところが、本物のファイルを対象に、本番環境で試すと、エラーが出ます。
 「mv: 宛先の '×××.txt' はディレクトリではありません
というエラーメッセージです。
 なぜ、本番ではエラーとなるのか。
 テスト環境では、ファイル名が半角アルファベットなのに、本番ではファイル名が全角の日本語となっています。テストと本番との違いは、それくらいです。ですから、おそらくファイ名の文字がネックとなっているものと推測されます。


 以上のとおり、結局、大量にあるファイルの、ファイル名一括変更は、今の時点では成功していません。
 mvコマンドを使ったシェルスクリプトではうまくいかないので、今度、renameコマンドで試してみます。
 コマンドを自由に駆使できるようになるためには、このような試行錯誤が遠回りのようですが必要なのです。




それでは、また次の記事で
goosyun
名前:
コメント:

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

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

 

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

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

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