您可以使用-M
文件測試以天爲單位獲取文件的年齡。 From -X
-M腳本開始時間減去文件修改時間,以天爲單位。
剩下的就是有關獲取文件的列表。這裏我使用opendir
和readdir
。
use 5.012; # so readdir assigns to $_ in a lone while test
opendir(my $dh, $dateDir) or die "Can't open $dateDir directory: $!";
while (readdir($dh)) {
my $file = "dateDir/$_";
if (-f $file and -M $file > 90) {
unlink $file or warn "Can't unlink $file: $!";
}
}
以上是需要的路徑除了因爲readdir
返回一個裸露的文件名,而沒有任何路徑。在實際刪除之前,您可以包含各種測試。 (並請始終測試代碼第一)
在版本對Perl 5.12之前的裸readdir
沒有設置$_
,這是上面的use 5.012
左右。對於這些版本中,我們需要做的
opendir(my $dh, $dateDir) or die "Can't open $dateDir directory: $!";
while (my $file_nopath = readdir($dh)) {
my $file = "$dateDir/$file_nopath";
# same as above
}
我們可以在同一行讀取目錄(如果它不是太大),如果我們寧願有第一
所有文件的列表
my @filenames_relative = readdir($dh);
這是因爲什麼readdir
回報是基於這就是所謂的上下文。因爲它的輸出在這裏被分配到一個數組,因此它被稱爲在列表環境,它返回目錄中的所有條目列表。
由於文件名都是相對於該目錄中我們可以map
它們變成完整路徑
my @files = map { "$dateDir/$_" } readdir($dh);
這裏列表環境由map
強加給readdir
,因爲該功能需要一個列表作爲輸入。
http://stackoverflow.com/q/17978927/936986 –