Thread Shell-Error durchs benutzen von `` (36 answers)
Opened by FlorianL at 2008-01-21 15:12

FlorianL
 2008-01-29 12:21
#105310 #105310
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
Moin, hoffe ihr hattet ein schönes Wochenende ;)

Ich wollte heute morgen mal Date::Calc einbauen, stellte dann aber fest das es wohl nicht zu den standart modulen gehört. Ist für mich also nix weil ich es höchstens auf die Testsysteme aber keinesfalls auf die Prod installieren darf, ich hab das Problem jetzt so gelöst:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
# Bei beendigung des Scripts werden alle dat-Files die älter als 4 Tage sind gelöscht.

my @datfiles = `ls -lt $filespath \|awk \'\{ print \$9\}\'`;
foreach (@datfiles) {
        chomp(my $file = $_);
        chomp(my $wholefile = "$filespath/$file");
        if (("%.3f",-M $wholefile) > "5") {
                unlink("$wholefile");
        } else {
                next;
        }
}


Dann wollte ich mich um das 2. Script kümmern das für die Ausgabe zuständig ist. Ich habe wie geraten ein paar 'time-prints' eingebaut:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
xtest11 # ./checksize.pl /home 28
1201601413: starte 'ls -Rlgo /home'...
1201601413: done...
1201601413: vor dem 'sdiff'...
1201601414: diff done...
1201601414: foreach-diff-schleife start
1201601608: foreach-diff-schleife stop
1201601608: start der order schleife
/home/re17830/chksize
build_checksize_db.pl 1630 1619 Diff: 11
checksize.pl 2035 2034 Diff: 1
/home/re17830/chksize/checksize_db
SizeCheck-08-01-29.dat 0 1088595 Diff: 1088595
/home/root
.bash_history 11462 11559 Diff: 97
.sh_history.1 9200 9284 Diff: 84
.vi_history 335 331 Diff: 4
1201601608: order-schleife stop


Es scheint also doch die letzte schleife zu sein die alles so ausbremst:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
print scalar(time) . ": vor dem 'sdiff'...\n";
my @diff = `sdiff $file $tmpfile \|egrep \[\:\\\<\\\>\\\|\]`;
print scalar(time) . ": diff done...\n";

print scalar(time) . ": foreach-diff-schleife start\n";
my @order;
foreach (@diff ){
   if ( $_ =~ m/^(.+):\s+\/.+:$/) {
      push @order, [$1."\n"];
   }
   elsif ( $_ =~ m/(^\d+)\s+(.+)\s+(.)\s+(\d+)\s+(.+)\s+$/ ) {
      if ($3 eq "\|") {
         push @{ $order[-1] },"\t$2\t$1\t$4\t" . "Diff: " . abs($1 - $4) . "\n";
      }
      elsif ($3 eq "\<") {
         push @{ $order[-1] }, "\tNew File:\t$5\tSize: $4\n";
      }
      elsif ($3 eq "\>") {
         push @{ $order[-1] },"\tFile deleted:\t$5\n";
      }
   }
}
print scalar(time) . ": foreach-diff-schleife stop\n";

print scalar(time) . ": start der order schleife\n";
for( @order ){
   next if @$_ == 1;
   print $_ for @$_;
}
print scalar(time) . ": order-schleife stop\n";


Liegt es vieleicht an dem abs($...) ?

View full thread Shell-Error durchs benutzen von ``