我最近想出了一種情況,我需要修剪一些相當大的日誌文件,一旦它們超過一定的大小。除了每個文件中最後1000行的所有內容都被丟棄之外,該作業每隔半小時由cron運行一次。我的解決方案是簡單地遍歷文件列表,檢查大小並在必要時修剪。如何使用Perl修整日誌文件?
for $file (@fileList) {
if (((-s $file)/(1024 * 1024)) > $CSize) {
open FH, "$file" or die "Cannot open ${file}: $!\n";
$lineNo = 0;
my @tLines;
while(<FH>) {
push @tLines, $_;
shift @tLines if ++$lineNo < CLLimit;
}
close FH;
open FH, ">$file" or die "Cannot write to ${file}: $!\n";
print FH @tLines;
close FH;
}
這個工程在當前的形式,但由於需要在每一行讀取並在必要時轉向大型日誌文件大量開銷(特別是那些與100_000 +線)。
有什麼方法可以在文件的一部分中讀取,例如:在這種情況下,我想只能訪問最後的「CLLimit」行。由於該腳本正在部署在已經看到更好的日子的系統上(思考Celeron 700MHz和64MB RAM),我正在尋找使用Perl的更快的替代方案。
感謝bash的例子,我對這個任務有類似的東西,但是我正在把所有的bash腳本轉換成Perl,所以需要一些指導。 Perl Monks教程看起來很有希望,我稍後會看看它。 – aks 2009-02-10 06:08:41
即使使用unix系統,您也可以獲取其他操作系統的尾部。 :) – 2009-02-10 17:48:36