Thread zwei Arrays vergleichen und doppelten Inhalt löschen
(31 answers)
Opened by Matze2.pl at 2014-11-13 10:27
Ich pack dir jetzt mal mein ganzes Script rein:
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) |