Thread zwei Arrays vergleichen und doppelten Inhalt löschen (31 answers)
Opened by Matze2.pl at 2014-11-13 10:27

Matze2.pl
 2014-11-13 12:22
#178322 #178322
User since
2014-10-30
23 Artikel
BenutzerIn
[default_avatar]
Ich pack dir jetzt mal mein ganzes Script rein:
more (27.0kb):
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/perl -w

use strict;
use warnings;
use POSIX;
use utf8;
use File::Find;
use diagnostics;
my $dir= "/var/lib/testverzeichnis/k_loesch/k_transport/";
my ($datei);
my (@files);
my $mydate = &datum_zeit("D.M.J");
my ($bla);
my $verzeichnis = "/var/lib/testverzeichnis/k_loesch";
my ($mumpitz);
my ($text);
my ($blo);
my ($blu);
my ($loesch);
my @loesch;
find(\&wanted,$dir) ;

sub wanted
{
my $file = $File::Find::name;
push (@files,$file) if(-f $file);
}
foreach $blu (@files)
{
open (BLU,">>blu.txt");
print BLU "$blu\n";
close (BLU);
}
open (BLI,"<blu.txt");
my @bli = <BLI>;
close (BLI);
unlink ("blu.txt");
opendir(DIR, $verzeichnis) || die "Kann Verzeichnis nicht oeffnen $dir:";
my @VerzeichnisInhalt = grep{ $_ =~ /\.txt$/ }readdir(DIR);
closedir DIR;


foreach $bla (@VerzeichnisInhalt)
{
open (TXT,"<$bla");
my @bla = <TXT>;
close (TXT);

foreach $text (@bla)
{
open (BLA,">>bla.txt");
print BLA "$text";
close (BLA);
}
}
open (BLO,"<bla.txt");
my @blo = <BLO>;
close (BLO);


my %h = map { $_ => 1 } @blo;
@bli = grep { ! exists $h{$_} } @bli;
print @bli;
open (ZWEITE,">>$mydate.txt");
print ZWEITE "@bli";
close (ZWEITE);
my ($alter);
my ($kurzalter);
my ($txt);
my @pfad = glob "*.txt";
foreach $txt (@pfad)
{
                $alter = -M "$txt";
                $kurzalter = sprintf "%.0f",$alter;
                if ($kurzalter > 14)
                {
                        open (LOESCH,"<$txt");
                        @loesch = <LOESCH>;
                        close (LOESCH);
                        foreach $loesch (@loesch)
                        {print "$loesch\n";
                        unlink "$loesch";}
                        unlink ("$txt");
                }
}




sub datum_zeit{

my $p=$_[0];
my %DATUM_ZEIT;
my $timeparameter;
my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
$Monat+=1;
$Jahrestag+=1;
$Monat = $Monat < 10 ? $Monat = "0".$Monat : $Monat;
$Monatstag = $Monatstag < 10 ? $Monatstag = "0".$Monatstag : $Monatstag;
$Stunden = $Stunden < 10 ? $Stunden = "0".$Stunden : $Stunden;
$Minuten = $Minuten < 10 ? $Minuten = "0".$Minuten : $Minuten;
$Sekunden = $Sekunden < 10 ? $Sekunden = "0".$Sekunden : $Sekunden;
$Jahr+=1900;

$DATUM_ZEIT{'J'}=$Jahr;
$DATUM_ZEIT{'M'}=$Monat;
$DATUM_ZEIT{'D'}=$Monatstag;
$DATUM_ZEIT{'h'}=$Stunden;
$DATUM_ZEIT{'m'}=$Minuten;
$DATUM_ZEIT{'s'}=$Sekunden;
$DATUM_ZEIT{'T'}=$Wochentag;

if ($p){
$p=~s/(J|M|D|h|m|s|T)/$DATUM_ZEIT{$1}/g, while ($p=~/J|M|D|h|m|s|T/);
}
else{
$p=$Jahr.$Monat.$Monatstag.'_'.$Stunden.$Minuten.$ Sekunden;
}
return $p;
}
#unlink ("bla.txt");

Aufgabe des scriptes ist es DAteien die auf k_transport gepackt werden nach 14 tagen zu löschen(start der zählung seit kopieren auf k_loesch).
jetzt habe ich zum Beispiel in 12.11.2014.txt folgenden inhalt:
/var/lib/testverzeichnis/k_loesch/k_transport/joult/Netzwerkdosen.xlsx
/var/lib/testverzeichnis/k_loesch/k_transport/joult/test.pl
/var/lib/testverzeichnis/k_loesch/k_transport/joult/wochenplan-14-15.pdf
/var/lib/testverzeichnis/k_loesch/k_transport/joult/k_loesch
/var/lib/testverzeichnis/k_loesch/k_transport/joult/Projektarchivierung.xlsx
/var/lib/testverzeichnis/k_loesch/k_transport/joult/loeschtest.pl
wenn ich das script am nächsten tag laufen lasse soll es nur die neu dazu gekommenen DAteinen in 13.11.2014.txt packen. es kommt aber vor das dort auch datein aus 12.11.2014.txt drin sind.
zb.:
/var/lib/testverzeichnis/k_loesch/k_transport/joult/wochenplan-14-15.pdf
/var/lib/testverzeichnis/k_loesch/k_transport/joult/k_loesch
so das ist der letzte stand als es noch ging

jetzt hab ich es mir anscheinend total zerschossen jetzt funktioniert dieser abgleich garnicht mehr :/

modedit Editiert von pq: more-tag hinzugefügt
edit Kann es sein das wenn die Arrays zu groß sind dieser abgleich nicht mehr funktioniert?
Last edited: 2014-11-13 13:22:25 +0100 (CET)

View full thread zwei Arrays vergleichen und doppelten Inhalt löschen