• ベストアンサー

Perlでファイル名を変更したいのですが

x.datとy.datが存在していた場合 y.datを削除して x.datをy.datに改名する命令はあるでしょうか? y.datが存在していないときには rename 'x.dat' 'y.dat'; があっていいのですがy.datがあるかもしれないときに使えないので困っています やはりunlinkと共に使うしかないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#43437
noname#43437
回答No.3

No.1です perlのドキュメントを確認してみました。 「Changes the name of a file; an existing file NEWNAME will be clobbered.」 ファイルの名前を変えます。すでに存在するNEWNAMEファイルは、上書きされます。 ・・と、書いてありました。 けれど、その下の方には・・ OSに依存するかも、というようなことがいろいろ書いてあるので・・微妙ですね。安全に、先にunlinkするか・・ターゲットシステム上で動けばとりあえずよしとするか・・Perlのドキュメント通りに動かないOSは無視するか・・。

guuman
質問者

お礼

わざわざ仕様まで調べていただきありがとうございます 参考にします

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

名前変更で上書きってlinuxだけなんですねー。 使った事がないから、あとで試してみようかなー。 回答が出ているようなので、適当な事を書いちゃい ます。^^ unlinkがいやなら、適当な名前にかえちゃうのは どうですか?  if( -e y.dat ){ $time = time(); rename y.dat , $time.dat; rename x.dat , y.dat; }  else{ rename x.dat , y.dat; } 書いては見たものの、けっこう怪しいかも。 それに、同じ秒で同一の処理があったら、不具合に なるだろうし、ファイルが巨大だったり、頻繁にこの 処理が起きたら、ファイルでいっぱいになってしまふ。 $time.dat がさらにあるかどうか、もしあったら、 数秒sleepさせるとして、、、。 スクリプトはあってないかも。 考え方だけ参考にしてみては~♪

guuman
質問者

お礼

ありがとうございます 不精なので1行でできないかと思ってみたのです

すると、全ての回答が全文表示されます。
noname#43437
noname#43437
回答No.1

UNIX系OSなら、renameだけでできますが? もしほかのOSで、renameだけでできないようなら、unlinkを使えばいいだけだと思いますが・・それほど悩む理由があるのでしょうか?

guuman
質問者

お礼

ありがとうございます FedoraCore3です 一応Unix系ですからrenameだけで大丈夫だったのですね unlinkしないといけないと思い込んでいました

すると、全ての回答が全文表示されます。

関連するQ&A