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

FlorianL
 2008-01-23 12:39
#105041 #105041
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/perl
use strict;

my $filespath = "/home/re17830/chksize/checksize_db/";

if (defined $ARGV[0]) {} else {
                print("Error: No argument\n\nUsage: checksize <path> <day>\n");
                exit 0;
}

chomp(my $mountpt = $ARGV[0]);
chomp(my $day = $ARGV[1]);

chomp(my $month = `date +%m`);
chomp(my $premonth = ($month -1));
if ($month == 01) {
        $premonth = 12;
}

chomp(my $year = `date +%y`);
chomp(my $preyear = ($year - 1));

my $file = "$filespath\SizeCheck-$year\-$month\-$day\.dat";
my $monthfile = "$filespath\SizeCheck-$year\-$premonth\-$day\.dat";
my $yearfile = "$filespath\SizeCheck-$preyear\-$premonth\-$day\.dat";

if (-T "$file") {} else {
        $file = "$monthfile";
}

my @fslist = `ls -Rlgo $mountpt`;

my $tmpfile = "/tmp/SizeCheck.tmp";
open(REWRITE, ">$tmpfile");
print REWRITE "$mountpt\:\n";

foreach(@fslist) {
        chomp();
        my @line = split(/ +/);
        if ($line[0] =~ m/^\//g) {
                print REWRITE "\n$line[0]\n";
        } elsif (($line[0] =~ m/^dr/g) || ($line[0] =~ m/^-r/g)) {
                print REWRITE "$line[2]\t\t$line[6]\n";
        }
}

my $tmp2 = "/tmp/sizecheck.tmp";
system("sdiff $file $tmpfile \|egrep \[\:\\\<\\\>\\\|\] > $tmp2");
open(TMP, "$tmp2");
my @diff = <TMP>;

sub calcdiff {
   my $old = shift;
   my $new = shift;
   if ($new > $old) {
      my $ergebniss_1 = ($new - $old);
      return($ergebniss_1);
   }
   elsif ($old > $new) {
     my $ergebniss_2 = ($old - $new);
     return ($ergebniss_2);
   }
}

my @order;
while( my $line  = @diff ){
   if ( $line =~ m/^(.+):\s+\/.+:$/) {
      push @order, [$1."\n"];
   }
   elsif ( $line =~ m/(^\d+)\s+(.+)\s+(.)\s+(\d+)\s+(.+)\s+$/ ) {
      if ($3 eq "\|") {
         push @{ $order[-1] },"\t$2\t$1\t$4\t" . "Diff: " . &calcdiff("$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";
      }
   }
}

for( @order ){
   next if @$_ == 1;
   print $_ for @$_;
}


Wenn ich das Script ausführe kommt er bis zur calcdiff function und dann passiert nix mehr, CPU last geht auf 100%...

und natürlich ma wieder keinen plan was falsch sein könnte.. :(

View full thread Shell-Error durchs benutzen von ``