Schrift
[thread]6044[/thread]

GZip mit Perl?!

Leser: 1


<< >> 8 Einträge, 1 Seite
[HR]Doomrunner
 2004-01-28 10:52
#79605 #79605
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Hi,

ich muss mit Hilfe eines Perl-Scripts (das über den Browser aufgerufen wird) den Inhalt eines Ordners in irgendein Archiv packen (z.B. gzip). Ich habe mal irgendwo aufgeschnappt, dass das gehen soll.

Hat jemand dafür nen Beispielcode?
havi
 2004-01-28 10:57
#79606 #79606
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Ich weiss das es fuer WinZip ein Kommandozeilen tool gibt das
du super mit Perl ansprechen kannst!

Gruss
Crian
 2004-01-28 11:46
#79607 #79607
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Nönö, da gibts ein schönes Modul: Archive::Zip

Ich hab hier auch gerade ein Beispielprogramm:

Code: (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
#!/usr/bin/perl
use strict;
use warnings;

use Archive::Zip;
use File::Find;

# Arbeitspfad, diesen ggf. anpassen:
my $pfad = "c:/daten/perl";

# zum angegebenen Pfad wechseln:
chdir $pfad or die "chdir nach '$pfad' nicht moeglich: $!";

# Zip-Objekt erstellen:
my $zip  = Archive::Zip->new();

# 2 Programme aus dem Verzeichnis ins Archiv hinzufügen:
$zip->addFile("./port_check.pl");
$zip->addFile("./pack_check.pl");

# Alle Dateien (mit Unterverzeichnissen) in ./Check/ finden:
my @Dateien;
find( sub {push @Dateien, $File::Find::name}, "./Check/" );

# Alle diese Dateien und Verzeichnisse hinzufügen (das erste ist ./Check/):
for (@Dateien) {
   if (-d) {
       $zip->addDirectory($_);
   }
   else {
       $zip->addFile($_);
   }
}

# Archivnamen bestimmen:
my $zipname = 'check_V';
{
   open CHECK, './Check/Check.pm' or die "Kann './Check/Check.pm' nicht oeffnen: $!";
   my @checkinhalt = <CHECK>;
   close CHECK or die "Kann './Check/Check.pm' nicht schliessen: $!";
   (my $v) = grep s~^\s*my\s+\$Version\s*=\s*'([.\d]+[a-z]?)'\s*;\s*$~$1~, @checkinhalt;
   $zipname .= $v;
}
$zipname .= '.zip';

# Archiv schreiben:
$zip->writeToFileNamed($zipname);


Der Teil zum ermitteln des Archivnamens dürfte für Dich unwichtig sein, da hole ich die Versionsinformation aus einem wichtigen Modul und übernehme dessen Version für das Zip-File. Aber der Rest dürfte Dir zusammen mit

perldoc Archive::Zip

weiterhelfen.\n\n

<!--EDIT|Crian|1075283498-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
[HR]Doomrunner
 2004-01-28 11:52
#79608 #79608
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
hey danke, ist genau das, was ich gesucht habe. :-)
Crian
 2004-01-28 11:53
#79609 #79609
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
So solls sein :-)\n\n

<!--EDIT|Crian|1075283655-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
[E|B]
 2004-01-28 17:31
#79610 #79610
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Wollte er nicht GZip?
Tie::Gzip hilft auch. ;)\n\n

<!--EDIT|[E|B]|1075303881-->
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
[HR]Doomrunner
 2004-01-29 09:17
#79611 #79611
User since
2003-09-04
77 Artikel
BenutzerIn
[default_avatar]
Mir ist prinzipiell egal in welchem Format das gepackt wird.

Sollte halt nur auf meinen Linux-Server laufen können. Wo wir gerade dabei sind. Gibt es analog dazu auch eine Möglichkeit die Datei wieder zu entpacken?
Crian
 2004-01-29 13:21
#79612 #79612
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[HR
Doomrunner,29.01.2004, 08:17]Gibt es analog dazu auch eine Möglichkeit die Datei wieder zu entpacken?

Klar, siehe perldoc Archive::Zip:

Quote
$zip = Archive::Zip->new();
die 'read error' if $zip->read( 'someZip.zip' ) != AZ_OK;
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 8 Einträge, 1 Seite



View all threads created 2004-01-28 10:52.