Thread File Datum wird verändert (7 answers)
Opened by electracks at 2008-03-06 15:59

electracks
 2008-03-06 15:59
#106760 #106760
User since
2008-03-05
6 Artikel
BenutzerIn
[default_avatar]
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: }

View full thread File Datum wird verändert