- ベストアンサー
perl-cgiのリネームについて
- Perl-CGIでディレクトリ内のファイル名をランダムに変換する方法
- Perl-CGIを使ってディレクトリ内のファイル名を変更したいが、ファイルが減ってしまう問題について
- Perl-CGIを使用してディレクトリ内のファイル名をランダムな名前に変換する方法
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>質問欄に書いたコードでファイルがどんどん減ってしまう原因 copyとunlinkの組み合わせの場合、 ・copy先に同じファイル名のものがある場合→上書きcopyされたファイルが消える ・copy元とcopy先が同じ名前になった場合→unlinkで消える だと思います
その他の回答 (1)
- pipipi523
- ベストアンサー率40% (148/365)
ファイル名を変更するなら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);#名前置き換え }
お礼
無事、動作いたしました。 回答いただき本当にありがとうございました!! ところで、ご質問欄に書いたコードでは、ファイルがどんどん減ってしまうのですが、私には、どうも、原因がつかめません。後学のため、もし、その原因が分かりましたら教えていただけると幸いです。
お礼
回答いただきありがとうございます。 とても、よく分かりました。 短い時間に何度も実行していたため、$nowtimeの値が変わる前に実行していました。また、よく見ると、この値が1秒単位ではなく1分単位になっているミスも発見できました。 ありがとうございました!!