Perl超初心者ですが、
あるディレクトリ内の500ファイルを配列処理で
リネームできないか検討しています;

@oldname=(4001,4005,4125・・・4050)

@newname=(8038,8952,8273,・・・7000)
にリネーム。

難しそうなので、フリーソフトも探したのですが、
見つからず、困ってます。
よろしくお願いします。

A 回答 (3件)

良い回答が出ているようですので、書いても、と思ったんですが、一応考え方、という事で書いておきます。



固定的なのと流動的(汎用的)なのについてなんですが、
例えば「あるディレクトリ内にあるファイルを全て、ある規則に従って名前を変更する」と言うのが、
頻繁に発生する場合は、流動的(汎用的)なプログラムを書く必要があるかなと思ったのです。
そういうファイル名をプログラム内部(外部にせよ)に持つよりかは、
ls(リストコマンド)の何かしらのオプションでファイル名だけを取り込むようにして、
それを規則にそって変更する方が何にでも使えるからです。
(あとで色々応用が出来ます)

ただある程度、そのように規則的に決まっているもの、とか、ほとんど使わない、という場合は、
データを先に作ってそれに従って、と言う固定的なプログラムの方が、
作るにも修正にも楽で良いかなと思って、どちらの場合なのかなと思ったのでした。

ともあれHead_Syndicateさんの方法+若干のエラー処理を加えるだけで問題ないと思います。
上手くいくと良いですね。
    • good
    • 0

仮にそのような配列が与えられているとしたら、



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ヶ月以上前のことはすぐ忘れますから。
    • good
    • 0

少し確認なのですが、このファイル名の変更は今回のみですか?それとも何度もやるようなものですか?


(流動的か固定的か)

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

いかがでしょうか??

この回答への補足

_mer_さん、早速のレスありがとうございます。

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

補足日時:2001/05/14 17:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報