2013-03-14 75 views
0

我把備份我的數據庫每天的文件名會像下面顯示如何檢查文件中像這樣

AWDRT.0.db2inst1.NODE0000.CATN0000.20130312095740.001 
AWDRT.0.db2inst1.NODE0000.CATN0000.20130313100330.001 
GSRTC.0.db2inst1.NODE0000.CATN0000.20130313102253.001 

我如何檢查備份被認爲今天與否,如果後可見CATN0000附加了時間戳,即YYYYMMDD。所以,我可以檢查備份文件存在

在外殼我用來做什麼樣

/home/ftpusr/backup/AWDRT.0.db2inst1.NODE0000.CATN0000.`date +%Y%m%d`* 

我如何做到這一點的Perl和我怎麼能清除舊的備份,我的殼呢像下面

/home/ftpusr/backup/AWDRT.0.db2inst1.NODE0000.CATN0000.`date +%Y%m%d -d "$i days ago"` 

幫助表示讚賞

回答

1

先改變目錄到該備份(將被添加到兩個腳本)

chdir ('/home/backups/vital'); 

要列出今天的備份(當地時間)

$now = time(); 
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($now); 
$ymd = sprintf("%4d%02d%02d", $year+1900, $mon+1, $mday); 

@backup = glob("*.CATN0000.$ymd*"); 

if ($#backup >= 0) { 
    print("Backup at $ymd: @backup\n"); 
} 
else { 
    print("No backup at $ymd\n"); 
} 

然後找到並刪除的文件n天前(如果有多個文件匹配,只有列表中的第一個被刪除)

$daysago = 3; # 3 days ago 
$now = time(); 

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($now - $daysago*3600*24); 
$old = sprintf("%4d%02d%02d", $year+1900, $mon+1, $mday); 

@oldbackup = glob("*.CATN0000.$old*"); 

if ($#oldbackup >= 0) { 
    print("Old Backup at $old: @oldbackup - removing (first one)\n"); 
    unlink($oldbackup[0]); 
} 
else { 
    print("No old backup at $old\n"); 
} 
+0

非常感謝你的人.......... – mviswa 2013-03-14 16:17:44

0

您可以在Perl使用反引號爲好。

$ perl -e"print qq(`date "+%Y%m%d"`)" 

從unl中刪除文件可以用unlink()完成。

檢查文件是否存在是用例如

if (-e $filename) { die("File $filename exists") }; 

更新:

您還可以使用READDIR完成它使用的文件名正則表達式。

use Time::localtime 

opendir(DIR, "/cygdrive/d/test/") || die("Error"); 
$backup_exists = 0; 
$prefix = "CATN0000."; 
while ($f = readdir(DIR)) { 
    $today_timestamp = sprintf('%4d%02d%02d', localtime->year()+1900, localtime->mon()+1, localtime->mday()); 
    if ($f =~ /$prefix$today_timestamp/) { 
    $backup_exists = 1; 
    } 
} 
closedir(DIR); 

if ($backup_exists) { 
    print "Backup exists\n"; 
} else { 
    print "Backup does not exist\n"; 
} 

更新2:但上面的glob()版本更有效。使用它。

+0

這是一個shell事情.......我已經我想用localtime或POSIX或.... – mviswa 2013-03-14 08:54:23

+0

然後使用'$ perl -MTime :: localtime -e「printf('%4d%02d%02d',localtime-> year()+ 1900, localtime-> mon()+ 1,localtime-> mday())「' – 2013-03-14 09:26:55

+0

但我如何檢查我上面顯示的文件,其中包含時間戳,如問題文章 – mviswa 2013-03-14 10:01:39

相關問題