Hi zusammen,
ich hab folgendes Problem.
Ich überprüfe X-Text-Dateien auf ihre MB - Größe
und wenn sie eine bestimmte Größe überschreiten, dann lösche ich die Datei bis auf die letzten X Zeilen.
Bis jetzt hab ich:
1 #!/usr/bin/perl -w2 use strict;3 4 my $dir = "."; 5 my $zeile = 10;6 my @array;7 8 opendir(DIR,"$dir")|| die "Kann Pfad nicht oeffnen $!";9 @array = readdir (DIR);10 closedir(DIR);11 #@array = glob("*.txt");12 13 14 foreach (@array)15 {16 17 if (($_ =~ /.txt$/)&& (300000 < (-<span class="operator">s "$_")))18 {19 my @dummy;20 open (DATEI, "$_") || die "Kann Datei nicht oeffnen $!";21 @dummy = ;22 close (DATEI);23 my $l = @dummy;24 print "Länge ist : ".(-s "$_")."\n"; 25 if ($l > $zeile)26 {27 my @dummy2;28 print " Zeilen:$l - Datei:$_ \n";29 my $mx =$l-1;30 my $myz = $l-$zeile;31 for ($myz;$mx>=$myz;$myz++)32 { 33 push(@dummy2, $dummy[$myz]);34 }35 open (DATEI, ">$_") || die "Kann Datei nicht oeffnen $!";36 print DATEI @dummy2;37 close (DATEI);38 }39 }40 }
Es tut zwar, aber irgendwie glaub ich, das es ziemlicher Muell ist und auch viel einfacher und sauberer geht.
Das Script läuft auf Solaris, d.h. zur Not könnt ich auch Unix-Befehle einbauen. Den Befehl dafür hab ich auch
tail -ZEILE DATEI > DATEI un der klappt auch aber nicht im Perl-Scriipt.
Versucht hab ich
system ("tail -$zeile $_ > $_");
aber irgendwie will mein Perl das nicht und gibt ne Fehlermeldung aus (die ich grad nicht mehr weiss).
Vielleicht kann mir jemand sowohl mit dem Unix-Befehl als auch plattformunabhängig, also nur mit Perl weiterhelfen.
thx
alligator