• 締切済み

配列を使ってファイル名のリネーム

Perl超初心者ですが、 あるディレクトリ内の500ファイルを配列処理で リネームできないか検討しています; @oldname=(4001,4005,4125・・・4050) を @newname=(8038,8952,8273,・・・7000) にリネーム。 難しそうなので、フリーソフトも探したのですが、 見つからず、困ってます。 よろしくお願いします。

みんなの回答

  • _mer_
  • ベストアンサー率47% (27/57)
回答No.3

良い回答が出ているようですので、書いても、と思ったんですが、一応考え方、という事で書いておきます。 固定的なのと流動的(汎用的)なのについてなんですが、 例えば「あるディレクトリ内にあるファイルを全て、ある規則に従って名前を変更する」と言うのが、 頻繁に発生する場合は、流動的(汎用的)なプログラムを書く必要があるかなと思ったのです。 そういうファイル名をプログラム内部(外部にせよ)に持つよりかは、 ls(リストコマンド)の何かしらのオプションでファイル名だけを取り込むようにして、 それを規則にそって変更する方が何にでも使えるからです。 (あとで色々応用が出来ます) ただある程度、そのように規則的に決まっているもの、とか、ほとんど使わない、という場合は、 データを先に作ってそれに従って、と言う固定的なプログラムの方が、 作るにも修正にも楽で良いかなと思って、どちらの場合なのかなと思ったのでした。 ともあれHead_Syndicateさんの方法+若干のエラー処理を加えるだけで問題ないと思います。 上手くいくと良いですね。

回答No.2

仮にそのような配列が与えられているとしたら、 for (my $i = 0; $i < @oldname; $i++) { rename($oldname[$i], $newname[$i]); } でいいと思います。基本はこれですが、例えば途中で すでに使われている名前を作ろうとしたときはエラーにするとか、 いくつかリネームした途中で失敗したらどうする、とか、そういった ことを考えておいたほうがいいかもしれませんね。 あとは@oldname, @newnameの作り方でしょうか。なにかファイルに 4001,8038 4005,8952 ....... とペアを書いておいて、例えばrename_dat.200105とかいう名前で 保存しておき、 % perl myrename.pl rename_dat.200105 の形式で実行できるようにしておくとか。こうすればrename_dat.*を 年4回書きなおして実行すればよくなります。 なるべく、ちょっとの変更で仕事が済むようにするのがコツですよ。 また、「あのファイルを変更すればいい」と後から思い出しやすく しておくのもコツ。私など1ヶ月以上前のことはすぐ忘れますから。

  • _mer_
  • ベストアンサー率47% (27/57)
回答No.1

少し確認なのですが、このファイル名の変更は今回のみですか?それとも何度もやるようなものですか? (流動的か固定的か) もしも何度もやるようであれば、perlなりshなりで、きちんとスクリプトを組むのが良いとは思うんですけれども、 もしも、もう現状あるファイルを単に変えたいというのであれば、 まぁ同じですがshとかでバッチファイルみたいなものを固定で作成して、 コマンド行をずらずら並べて実行みたいにした方が早いと思うんですけども。 いかがでしょうか??

ikurakun
質問者

補足

_mer_さん、早速のレスありがとうございます。 >少し確認なのですが、このファイル名の変更は今回のみで>すか?それとも何度もやるようなものですか? >流動的か固定的か) 正直に言うと、年4回程度です。 どちらかというと、固定的なのでしょうか?

関連するQ&A