Mehrere Dateien in einen Stream stecken

Hallo,

wer erraet, was ich damit vor habe:

 $ ( ( cd foo; tar -cO \* ); ( cd bar; tar -cO \* ) ) \>foobar.tar

Richtig: ich versuche den Inhalt der Verzeichnisse foo und bar in ein Archiv zu stopfen, ohne das vorgestellte foo bzw. bar, wie es bei

 $ tar -cO foo/\* bar/\* \>foobar.tar

der Fall waere. Dummerweise funktioniert das nicht, weil das erste tar schon an das Archiv haengt, dass hier nichts mehr kommt und ein spaeter entpackendes tar an der Stelle einfach aufhoert. Ich hab leider auch keine Option fuer’s tar gefunden, die eine gewisse Anzahl voranstehender Verzeichnisse weglaesst.

Hm, Ideen? Meinungen? Hinweise? Auch ganz alternative Ansaetze, mit ohne tar. Wichtig ist nur, dass ich eine Menge an Dateien aus unterschiedlichen Verzeichnissen in einen Stream packe, ohne dass ich temporaere Dateien erzeugen muss. Der Stream wird durch’s Netz geschickt und auf der anderen Seite on-the-fly gleich wieder entpackt. Dabei sollen die Dateien aus ehemals unterschiedlichen Verzeichnissen im gleichen landen. Die andere Seite soll also so aussehen:

 $ cd $dest; wget -qO- http://server/cgi-bin/archive.cgi |tar x-

Danke,
Gruss vom Frank.

Hm, Ideen? Meinungen? Hinweise? Auch ganz alternative
Ansaetze, mit ohne tar. Wichtig ist nur, dass ich eine Menge
an Dateien aus unterschiedlichen Verzeichnissen in einen
Stream packe, ohne dass ich temporaere Dateien erzeugen muss.

Das dürfte aber zu Problemen führen, wenn es in den Verzeichnissen Dateien mit gleichen Namen gibt.

Dein Problem sollte sich eigentlich mit „–strip-components=NUMBER“ beim Auspacken lösen lassen (tar (GNU tar) 1.15.1).

Viele Grüße, Daniel

Hallo,

wer erraet, was ich damit vor habe:

$ ( ( cd foo; tar
-cO * ); ( cd bar; tar -cO * ) ) >foobar.tar

Gute Frage:

tar: Option -O is not permitted in mode -c

Richtig: ich versuche den Inhalt der Verzeichnisse foo und bar
in ein Archiv zu stopfen, ohne das vorgestellte foo bzw. bar,

[docvalde@mnetworking ~/temp]$ ls 
total 10
drwxr-xr-x 5 docvalde docvalde 512B Sep 24 01:40 ./
drwxr-xr-x 10 docvalde docvalde 1.0K Sep 24 01:23 ../
drwxr-xr-x 2 docvalde docvalde 512B Sep 24 01:23 dir1/
drwxr-xr-x 2 docvalde docvalde 512B Sep 24 01:24 dir2/
drwxr-xr-x 2 docvalde docvalde 512B Sep 24 01:40 dir3/

[docvalde@mnetworking ~/temp]$ cd ~/temp/dir1/; tar -cvf ~/temp/foobar.tar ./\* ; cd ~/temp/dir2/; tar -rvf ~/temp/foobar.tar ./\* 
a file1-1
a file1-2
a file1-3
a file2-1
a file2-2
a file2-3

[docvalde@mnetworking ~/temp/dir2]$ cd ../dir3/

[docvalde@mnetworking ~/temp/dir3]$ ls
total 4
drwxr-xr-x 2 docvalde docvalde 512B Sep 24 01:40 ./
drwxr-xr-x 5 docvalde docvalde 512B Sep 24 01:40 ../

[docvalde@mnetworking ~/temp/dir3]$ tar -xvf ~/temp/foobar.tar
x file1-1
x file1-2
x file1-3
x file2-1
x file2-2
x file2-3

[docvalde@mnetworking ~/temp/dir3]$ ls
total 4
drwxr-xr-x 2 docvalde docvalde 512B Sep 24 01:41 ./
drwxr-xr-x 5 docvalde docvalde 512B Sep 24 01:40 ../
-rw-r--r-- 1 docvalde docvalde 0B Sep 24 01:23 file1-1
-rw-r--r-- 1 docvalde docvalde 0B Sep 24 01:23 file1-2
-rw-r--r-- 1 docvalde docvalde 0B Sep 24 01:23 file1-3
-rw-r--r-- 1 docvalde docvalde 0B Sep 24 01:23 file2-1
-rw-r--r-- 1 docvalde docvalde 0B Sep 24 01:23 file2-2
-rw-r--r-- 1 docvalde docvalde 0B Sep 24 01:24 file2-3

[docvalde@mnetworking ~/temp/dir3]$ uname -mrs
FreeBSD 5.4-STABLE i386

Das isses irgendwie, oder hab ich was falsch verstanden?

Gruß,

Malte

Gute Frage:

tar: Option -O is not permitted in mode -c

Komisches tar hast Du da:

frank@harbard [~/tmp] $ wget -qO- ftp://ftp.gnu.org/gnu/tar/tar-1.15.tar.gz |gzip -cd |tar x-
frank@harbard [~/tmp] $ cd tar-1.15/
frank@harbard [~/tmp/tar-1.15] $ ./configure \>/dev/null 2\>&1
frank@harbard [~/tmp/tar-1.15] $ make \>/dev/null 2\>&1
frank@harbard [~/tmp/tar-1.15] $ ./src/tar -cO README \>/dev/null
frank@harbard [~/tmp/tar-1.15] $ echo $?
0
frank@harbard [~/tmp/tar-1.15] $ ./src/tar --version 
tar (GNU tar) 1.15
frank@harbard [~/tmp/tar-1.15] $

[docvalde@mnetworking ~/temp]$ cd ~/temp/dir1/; tar -cvf
~/temp/foobar.tar ./* ; cd ~/temp/dir2/; tar -rvf
~/temp/foobar.tar ./*

-r hab ich auch schon gefunden. Dummerweise kann es sich nicht an einen via stdout vorbeifliegenden Stream anbinden.

Das isses irgendwie, oder hab ich was falsch verstanden?

Ja. Du hast temporaere Dateien erzeugt und handelst Dir damit die ueblichen Diskussionen ein, ob den ~/temp denn nun wirklich ein guter Ablagepunkt dafuer ist, wenn nein, wohin denn dann damit und was passiert, wenn zwei gleichzeitig usw. Alles nicht so schoen und unerwuenscht. Das Script soll es gleich per CGI an den Webserver raus ins Netz schicken.

Gruss vom Frank.

Das dürfte aber zu Problemen führen, wenn es in den
Verzeichnissen Dateien mit gleichen Namen gibt.

Ja, aber das lass mal meine Sorge sein.

Dein Problem sollte sich eigentlich mit
„–strip-components=NUMBER“ beim Auspacken lösen lassen (tar
(GNU tar) 1.15.1).

Hm, scheint so.

frank@harbard [~/tmp/jail] $ find
.
./bar
./bar/foobar2
./foo
./foo/foobar1
./foobar
frank@harbard [~/tmp/jail] $ tar -cO foo/\* bar/\* | ( cd foobar/; tar --strip-components 1 -xf- )
frank@harbard [~/tmp/jail] $ find
.
./bar
./bar/foobar2
./foo
./foo/foobar1
./foobar
./foobar/foobar1
./foobar/foobar2
frank@harbard [~/tmp/jail] $

Passiert halt auf Client-Seite und ist damit irgendwie nicht so elegant. Zur Not wird’s gehen.

Danke,
Gruss vom Frank.

Gute Frage:

tar: Option -O is not permitted in mode -c

Komisches tar hast Du da:

frank@harbard [~/tmp/tar-1.15] $ ./src/tar --version
tar (GNU tar) 1.15

Ansichtssache:

[docvalde@mnetworking ~]$ tar --version
bsdtar 1.01.020, libarchive 1.02.006
Copyright (C) 2003-2004 Tim Kientzle

-r hab ich auch schon gefunden. Dummerweise kann es sich
nicht an einen via stdout vorbeifliegenden Stream anbinden.

Du hast temporaere Dateien erzeugt und handelst Dir damit
die ueblichen Diskussionen ein, ob den ~/temp denn nun
wirklich ein guter Ablagepunkt dafuer ist, wenn nein, wohin
denn dann damit und was passiert, wenn zwei gleichzeitig usw.
Alles nicht so schoen und unerwuenscht. Das Script soll es
gleich per CGI an den Webserver raus ins Netz schicken.

Demzufolge fallen Möglichkeiten, bei denen die Dateien schlicht geholt werden, aus? Naja, sonst hätteste ja nicht gefragt. Sorry, no more ideas.

Gruß,

Malte