2015-05-05 33 views
1

我需要刪除超過12小時的文件夾。刪除perl中超過12小時的文件夾

這是我的代碼,當然不完整。我不知道如何查看perl中每個文件夾的「年齡」。

#!/usr/bin/perl -w 

use v5.10.0;          
use File::Copy; 
use POSIX 'strftime'; 
use File::Temp; 



my $lapso = 12; #### is the limit of "age" in hours 
my $hour = strftime("%H", localtime(time)); 
say "$hour"; 
my $limit = strftime "%Y%m%d$H", localtime(time - $lapso * 3_600); 
say "$limit"; #I get the limit of data 

my $dir = '/home/sim/data/'; 
opendir(DIR,"$dir"); 
@files = readdir(DIR); 
foreach $file (@files){ 
print $file, "\n"; 
} 
closedir(DIR) 

而不是我需要與$限制文件夾的數據進行比較....

任何幫助嗎?

+5

http://perldoc.perl.org/functions/stat.html –

+2

另外:強烈建議'嚴格'和'警告'。 – Sobrique

回答

0

使用stat來檢索文件的修改時間和比較,當前的時間,看是否差距超過12小時。

如果您要刪除的文件夾非空,您可能還會對File::Remove模塊感興趣。

4

-M返回天一個文件/目錄的年齡,所以

print $dir, "\n" if 0.5 < -M $dir; 

參見文檔:-X

+1

'-M'返回文件被修改後的時間。它不會回到它的年齡。這是不可能的,因爲操作系統沒有跟蹤文件的創建時間。 – ikegami

+0

@ikegami由於各種操作系統版本無法區分inode「birthtime」和「changetime」,是否沒有像'stat -f%c'這樣的便攜式perl版本? –

+0

@G。 Cito,這在我的GNU/linux上不起作用。但是,這些信息根本就不存在於某些系統上。我認爲創作日期存在於Windows世界,但在別處很少見。 – ikegami

-1

你真的想用Perl嗎?那麼好吧。 :P

find . -type f -mmin +$((12*60)) -print0 | perl -n0e unlink 
相關問題