Thread File Datum wird verändert
(7 answers)
Opened by electracks at 2008-03-06 15:59
Hallo!
Ich habe folgendes Problem. Ein skript soll eine Zip-Datei aus einer Mail extrahieren und die Datei dann entpacken. Das funktioniert auch alles einwandfrei. Komischerweise bekommen aber die entpackten Dateien immer das aktuelle Datum und nicht das Datum der Dateien im Zip File. Ich habe das Ganze schon mit 2 verschiedenen zip Modulen (Archive::Zip und IO::Uncompress::Inflate) probiert. Könnte es dran liegen dass ich auf einen Windowsshare entpacke (CIFS)? Lokal funktioniert es soweit ich das sehe. Weiss jemand einen Lösungsansatz oder einen Workaround? Folgendes Script verwende ich: 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 122 123 124 125 126 127 001: #!/usr/bin/perl 002: use strict; 003: use MIME::Explode; 004: use File::Path; 005: 006: my $infile = '/scripts/deploy/test.txt'; #Datei zum Zwischenspeichern der Mail 007: my $deployroot = '/deployshare/_Deployment/02_Deployments'; #Pfad zu den Deployments 008: my $ticket = ""; 009: my $dateiname = ""; 010: my $logfile = "unzip.log"; 011: 012: #Zwischenspeichern der Mail 013: 014: open(IN,">$infile") or die "Konnte Tempdatei $infile nicht öffnen"; 015: while(<>){ 016: print IN $_; 017: } 018: close IN; 019: 020: open(IN,"<$infile") or die "Konnte Tempdatei $infile nicht öffnen"; 021: while(<IN>){ 022: $_ =~ m/\[Ticket#(\d+)/; 023: $ticket = $1; 024: } 025: close IN; 026: 027: open(IN,"<$infile") or die "Konnte Tempdatei $infile nicht öffnen"; 028: while(<IN>){ 029: $_ =~ m/filename\=\"(.*?\.zip)/; 030: $dateiname = $1; 031: } 032: close IN; 033: 034: #Auslesen des Dateinamens ohne Extension 035: 036: $dateiname =~ m/^(.*?)\./; 037: my $deployname = $1; 038: 039: #Auslesen des Jahres aus dem Dateinamen 040: 041: $dateiname =~ m/(\d\d)......\.zip$/; 042: my $deployyear = $1; 043: 044: #Auslesen des Deployment Präfix 045: 046: $dateiname =~ m/^(....)/; 047: my $prefix = $1; 048: 049: #Erstellen des Pfads 050: my $deploypath = $deployroot."/GJ_".$deployyear."/".$deployname; 051: my $input = $deploypath."/".$dateiname; 052: my $output = $deploypath."/".$ticket."/"; 053: umask "0000"; 054: #Prüfen ob Verzeichnis schon vorhanden 055: if (-d $deploypath){ 056: anhangkopieren($deploypath); 057: #Entpacken des Zips 1.Attribut input, 2. Attr. output, 3. Attr. log 058: entpacken($input,$output,$logfile); 059: } 060: #Fallunterscheidung nach Deployments, Verzeichnis erstellen und Anhang kopieren 061: 062: elsif ($prefix eq "oms_"){ 063: 064: mkpath ([$deploypath.'/oms', $deploypath.'/Backup/P/oms', 065: $deploypath.'/Backup/S/oms', $deploypath.'/'.$ticket]); 066: 067: anhangkopieren($deploypath) or die("Anhang konnte nicht aus Mail extrahiert werden"); 068: entpacken($input,$output,$logfile); 069: } 070: elsif ($prefix eq "PT5_"){ 071: 072: mkpath ([$deploypath.'/website2', $deploypath.'/Backup/P/website2', 073: $deploypath.'/Backup/S/website2', $deploypath.'/'.$ticket]); 074: 075: 076: anhangkopieren($deploypath) or die("Anhang konnte nicht aus Mail extrahiert werden"); 077: entpacken($input,$output,$logfile); 078: } 079: elsif ($prefix eq "evo_"){ 080: 081: mkpath ([$deploypath.'/admall', $deploypath.'/Backup/P/admall', 082: $deploypath.'/Backup/S/admall', $deploypath.'/'.$ticket]); 083: 084: anhangkopieren($deploypath); 085: entpacken($input,$output,$logfile); 086: } 087: else { 088: die("+++++ $dateiname Deployment kann nicht zugeordnet werden +++++"); 089: }; 090: 091: 092: #Extrahieren des Mailanhangs aus der Mail und speichern des Anhangs in Outputdir 093: 094: sub anhangkopieren{ 095: my $explode = MIME::Explode->new( 096: output_dir => "$_[0]", 097: mkdir => 0777, 098: decode_subject => 1, 099: check_content_type => 1, 100: content_types => ["application/x-zip-compressed"], 101: types_action => "include" 102: ); 103: 104: 105: open(MAIL, "<$infile") or 106: die("Couldn't open file.mbox for reading: $!\n"); 107: open(OUTPUT, ">tmp_file.tmp") 108: or die("Couldn't open file.tmp for writing: $!\n"); 109: my $headers = $explode->parse(\*MAIL, \*OUTPUT); 110: close(OUTPUT); 111: close(MAIL); 112: } 113: 114: sub entpacken{ 115: use Archive::Zip qw( :ERROR_CODES :CONSTANTS ); 116: my $zipfile = Archive::Zip->new($_[0]); 117: if(defined $zipfile){ 118: my @members = $zipfile->members(); 119: foreach my $member (@members){ 120: chdir $_[1]; 121: $zipfile->extractMember($member); 122: open (LOG,">$_[2]"); 123: print LOG $_[1].$member." erstellt"; 124: close LOG; 125: } 126: } 127: } |