• ベストアンサー

perl-cgi「日時によるファイル操作」について

perl-cgi「日時によるファイル操作」について perl-cgiで、あるディレクトリ中のファイル更新日が最も若い2ファイルを表示して、それ以外を削除したいのですがどのようにすればよいでしょうか? #調べたいディレクトリを読み込む。 $Dir = "./cache"; opendir DIR,"$Dir"; my @alldir = readdir DIR; close DIR; #ファイル(パス)名と作成日時を求める。 #最新2つのファイルパス(名)を表示する。 print "NewFile".ファイルパス1; print "<HR>"; print "OldFile".ファイルパス2; #最新2つ以外は全て削除 unlink($_); exit(0);

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

  • ベストアンサー
  • ren10
  • ベストアンサー率52% (9/17)
回答No.2

こんな感じではどうでしょう? $Dir = "./cache"; #作業し易くする為、カレントディレクトリを変更 chdir($Dir); opendir(DIR, "./"); @alldir = sort {(stat $a)[9] <=> (stat $b)[9]} grep(-f, readdir(DIR)); closedir(DIR); print "NewFile" . pop(@alldir); print "<HR>"; print "OldFile" . pop(@alldir); unlink(@alldir); #カレントディレクトリを元に戻す chdir("../");

ayu_mi_nic
質問者

お礼

返事が送れて申し訳ありません。 早速実行してみたところ、うまくいきました! 本当に、ありがとうございました!!

その他の回答 (1)

  • arcsin
  • ベストアンサー率70% (28/40)
回答No.1

即席ですが、これはどうでしょう $Dir = "./cache"; opendir DIR,"$Dir"; my @alldir = readdir DIR; close DIR; # ファイル名にパスを追加 @alldir = grep($_ = "$Dir/$_", @alldir); # ディレクトリの除去 @alldir = grep(!-d $_, @alldir); # 更新時間順にソート(昇順) @alldir = sort {(stat $a)[9] <=> (stat $b)[9]} @alldir; # 最新と2番目の最新 my $newfile = pop(@alldir); my $oldfile = pop(@alldir); print "Newfile: $newfile"; print "<HR>"; print "Oldfile: $oldfile"; # それ以外除去 foreach(@alldir){ unlink($_); } exit;

ayu_mi_nic
質問者

お礼

返事が送れて申し訳ありません。 早速実行してみたところ、うまくいきました! 本当に、ありがとうございました!!

関連するQ&A