チョコミントアイス

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);

A 回答 (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("../");
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/07 19:47

即席ですが、これはどうでしょう




$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;
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/07 19:47

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