• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perl-cgiのリネームについて)

perl-cgiのリネームについて

このQ&Aのポイント
  • Perl-CGIでディレクトリ内のファイル名をランダムに変換する方法
  • Perl-CGIを使ってディレクトリ内のファイル名を変更したいが、ファイルが減ってしまう問題について
  • Perl-CGIを使用してディレクトリ内のファイル名をランダムな名前に変換する方法

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

  • ベストアンサー
  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.2

>質問欄に書いたコードでファイルがどんどん減ってしまう原因 copyとunlinkの組み合わせの場合、 ・copy先に同じファイル名のものがある場合→上書きcopyされたファイルが消える ・copy元とcopy先が同じ名前になった場合→unlinkで消える だと思います

ayu_mi_nic
質問者

お礼

回答いただきありがとうございます。 とても、よく分かりました。 短い時間に何度も実行していたため、$nowtimeの値が変わる前に実行していました。また、よく見ると、この値が1秒単位ではなく1分単位になっているミスも発見できました。 ありがとうございました!!

その他の回答 (1)

  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.1

ファイル名を変更するならcopyではなく、 rename関数を使うのが良いと思います こんな感じでしょうか。 #!/usr/local/bin/perl $dir = "./ABC/"; opendir DIR, $dir; @files = grep { !m/^(\.|\.\.)$/g } readdir DIR; # ← 「.」 「..」 以外のファイルを取得 close DIR; srand; foreach(@files){ $newfile=""; $n=int rand(8)+3; #ファイル名文字数をランダムに決める while($n-- > 0 && !exists($file{$newfile})){#存在しないランダムの英数字の文字列を作る $newfile.=pack("c",rand(25)+0x41); } $file{$newfile}++;#使用したファイル名を記憶 rename("$dir"."$_" , "$dir".$newfile);#名前置き換え }

ayu_mi_nic
質問者

お礼

無事、動作いたしました。 回答いただき本当にありがとうございました!! ところで、ご質問欄に書いたコードでは、ファイルがどんどん減ってしまうのですが、私には、どうも、原因がつかめません。後学のため、もし、その原因が分かりましたら教えていただけると幸いです。

関連するQ&A