No.1067の『ファイルの削除について』の続き
あるディレクトリ内のファイル(ファイル名はマシン日付.csvとなっています。例:20040906.csv)を検索し、
今日より90日前の日付を取得し、それ以前のファイルをディレクトリから削除するという操作をしたいと思います。
ただし、ファイル名の20040906の前後に文字がある場合には削除できないようにしたいのです。
--------------------------------------
以下、EtherskyのNo.1067に対する回答より抜粋
$day = 90; #90日前
$dir = './hoge'; #hogeディレクトリとする
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time-(60*60*24*$day)); #$day日前の日付を求める
$del_target = sprintf("%04d%02d%02d",$year+1900,$mon+1,$mday); #yyyymmddの形にする($del_target前を削除対象にする)
opendir(DIR,$dir); #ディレクトリを開く
@list = grep {/\.csv$/i && -f "$dir/$_"} readdir(DIR); #ディレクトリから拡張子csvでファイルだけを吸い出してリストにする
closedir(DIR); #ディレクトリを閉じる
foreach (@list){ #リストから一つずつ調べる
if(/(\d+)\.csv$/i){ #頭が数字のファイルだったら
if($1 lt $del_target){ #$del_targetと比較して該当するなら
unlink("$dir/$_"); #削除
}
}
}
--------------------------------------
上記の場合で試したところ、20040906の前にabcとつけると
削除されてしまいます。
後ろにabcがついている場合には削除されません。
どのようにすれば削除されないようになるでしょうか?
お礼
よくわかりました。ありがとうございます。