Schrift
[thread]7212[/thread]

tar.gz-Archiv erzeugen: Wie erhalte ich die Pfadnamen?

Leser: 1


<< |< 1 2 >| >> 11 Einträge, 2 Seiten
marco42
 2005-08-16 15:04
#57219 #57219
User since
2005-08-16
6 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

ich würde gern ein tar.gz Archiv erzeugen und die Pfadnamen der Dateien erhalten bzw. selbst festlegen. Mit Archive::Tar habe ich zwar ein tar.gz hinbekommen, aber ich konnte keine Pfade mit einpacken :(

Weiss einer von Euch, wie ich für die einzupackenden Dateien Pfade mit angeben?

Viele Grüße

Marco
Relais
 2005-08-16 15:29
#57220 #57220
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
Standardmäßig tut CPAN:Archive::Tar was du haben willst. Zeig mal, wie es nciht geklappt hat.
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
marco42
 2005-08-16 15:41
#57221 #57221
User since
2005-08-16
6 Artikel
BenutzerIn
[default_avatar]
Hallo Relais,

danke für deine Antwort. Unten findest du meinen Testcode, das tar-archiv wird zwar erzeugt, aber wie geschrieben sind die Dateien alle ohne Verzeichnisinfo archiviert. Ich habe mir das tar.gz-Archiv mit Winzip angeschaut, das kann normalerweise auch gut mit tar-Archiven umgehen.

Grüße

Marco

---
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
use strict;
use warnings;
use File::Find;
use File::Basename;
use IO::File;
use Archive::Tar;

testArchive();

sub testArchive
{
use Archive::Tar;

our $tar = Archive::Tar->new();
our @names;
my $doc;

find (\&wanted, ".");

sub wanted
{
if (-f $File::Find::name)
{
print "Pushing file '" . $File::Find::name . "'.\n";
push @names, $File::Find::name;


}

}
foreach my $name (@names)
{
print "Name is '" . $name . "'.\n";
if (open(FILE, "<$name"))
{

binmode FILE;

while (<FILE>)

{

$doc .= $_;



}

close (FILE);
}
else
{
print "Error: Failed to open '" . $name . "'!\n";


}
my @path = fileparse ($name);
$name = join ('', $path[0], $path[2]);

$tar->add_data($name, $doc);
$doc = '';


}

$tar->write("test.tar.gz", 1);

}


edit renee: ne Runde [code]-Tags spendiert\n\n

<!--EDIT|renee|1124193211-->
renee
 2005-08-16 15:55
#57222 #57222
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Also mit
Code: (dl )
1
2
3
4
5
6
7
8
9
#! /usr/bin/perl

use strict;
use warnings;
use Archive::Tar;

my $archive = Archive::Tar->new();
$archive->add_files('../SOM/both/file1.txt','../SOM/both/file2.txt');
$archive->write('test.tar.gz',1);


werden auch keine Pfade beibehalten...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
marco42
 2005-08-16 17:09
#57223 #57223
User since
2005-08-16
6 Artikel
BenutzerIn
[default_avatar]
Hallo Rene,

danke für die code-snippets ;) (und die code tags...)

Warum werden denn die Verzeichnisse nicht beibehalten (Plattform-Unabhängigkeit?) und wie kann ich Pfade im Archiv anlegen?

Grüße

Marco\n\n

<!--EDIT|marco42|1124198007-->
anti
 2005-08-16 17:15
#57224 #57224
User since
2003-11-29
155 Artikel
BenutzerIn
[default_avatar]
Hi,

unter Linux sind die Pfade mit renee's Code enthalten. Ich glaube, gelesen zu haben, dass Winzip für tar-Archive nicht besonders geeignet ist, da Pfade und Links verloren gehen.

greetz, anti
renee
 2005-08-16 17:33
#57225 #57225
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
<strike>Also hier wird der Pfad nicht beibehalten. Wir setzen Solaris ein. Ich habe das Skript laufen lassen, mit gunzip und tar das Ganze ausgepackt, jedoch waren die Pfade nicht gespeichert...</strike>

Edit: werden doch gespeichert, hatte das falsche Testskript verwendet. Scheint also wirklich an WinZip zu liegen...\n\n

<!--EDIT|renee|1124199798-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Relais
 2005-08-16 17:38
#57226 #57226
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=renee,16.08.2005, 13:55]werden auch keine Pfade beibehalten...[/quote]
Jedoch werden hier die Pfade behalten:

Code: (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl

use strict;
use warnings;
use Archive::Tar;

my $archive = Archive::Tar->new();
$archive->add_files( qw( /absoluter/pfad/erste.test /absoluter/pfad/zwote.test );
$archive->write('test.tar.gz',1);
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
marco42
 2005-08-17 10:49
#57227 #57227
User since
2005-08-16
6 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

vielen Dank für Eure Beiträge! Ich habe den Testcode jetzt mal unter Windows oder cygwin laufen lassen und versucht das tar.gz unter Windows oder cygwin auszupacken.

Unter cygwin werden die Verzeichnisse korrekt ausgepackt (mit tar), unter Windoze nicht (mit WinZip) :(

Ich habe aber tar.gz-Archive, die mit WinZip problemlos (also auch mit Verzeichnissen) ausgepackt werden, kann man das auch mit Perl hinbekommen?

Grüße

Marco
Relais
 2005-08-17 12:12
#57228 #57228
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
Schreib die Macher von WinZip mal an, die haben den Fehler eingebaut. Da WinZip nicht OpenSource ist, kannst Du den Fehler dort nicht alleine ohne deren Hilfe beheben =(.
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2005-08-16 15:04.