verfaßt von Ben, 19.02.2013, 15:06:33
> Hallo Ben!
>
> > > > in einer tar.gz datei sind mehrere Daten in
> > mehren
> > > > unterverzeichnissen drinnen
> > > >
> > > > a/b/c/d/*.txt => 1-x.txt
> > > >
> > > > ich möchte alle 1-x.txt in ein homeverzeichnis (ohne
> > > Unterordner)stellen.
> > > > wie mach ich das?
>
> [...]
>
> > ich befinde mich in der Linux Commandzeile, mittels script (cmd) möchte
> ich
> > die Daten entpacken.
> >
> > bsp und Legende:
> > a/b/c/d => das sind mehrere unterordner im zipfile
> > 1 - x => bedeutet 1 (1 File) bis x(x bedeutet unzählige Datenfiles)
> >
> > diese x Datenfiles (in Unterordner) möchte ich im linux auf ein
> Verzeichnis
> > (ohne unterordner) entpacken
> >
> > => das angegebe bsp: '-o' funktioniert im windows, welchen Command dazu
> > gibt es im Linux?
>
> Bei "tar" gibt es gar keins dazu. Und ein anderes Linux-Programm,
> was eine .tar.gz-Datei entpackt, kenne ich nicht. Sieht also nicht gut aus,
> aber einen kleinen Lichtblick gibt es.
>
> Doch der Reihe nach.
>
> Man kann mit
>
tar --gzip -xvf ARCHIVNAME.tar.gz
> den kompletten Inhalt der gepackten Datei ARCHIVNAME.tar.gz in dasjenige
> Verzeichnis enpacken, in dem man sich gerade befindet. Man kann auch
>
tar --gzip -xvf ARCHIVNAME -C ZIELVERZEICHNIS
> verwenden, dann wird der Inhalt eben in das Verzeichnis ZIELVERZEICHNIS
> entpackt. Allerdings werden in beiden Beispielen Unterverzeichnisse und
> deren Inhalte genau so wieder entpackt, wie sie vorher eingepackt wurden.
>
> Wenn also die Dateien
> a.txt
> verzeichnis1/b.txt
> verzeichnis1/verzeichnis2/c.txt
>
> eingepackt wurden, packt einer der beiden Befehle oben a.txt direkt in das
> Zielverzeichnis aus. Dann wird (immer noch durch denselben Befehl) im
> Zielverzeichnis das Unterverzeichnis verzeichnis1 erstellt und dort hinein
> die Datei b.txt ausgepackt. Anschließend kommt nochmal dasselbe Theater für
> c.txt mit beiden Verzeichnissen davor.
>
> Bei diesem "tar" kann man nun mit "--strip-components=ZAHL" eine Anzahl von
> "davorstehenden" Verzeichnissen weglassen; wieviele, das gibt ZAHL an. Mit
> den drei .txt-Dateien oben im Beispiel und
tar --gzip -xvf
> ARCHIVNAME.tar.gz -C ZIELVERZEICHNIS --strip-components=1
würde dann
> die Datei a.txt gar nicht entpackt. b.txt würde, wie Du es Dir
> vermutlich wünschst, in ZIELVERZEICHNIS entpackt, aber ohne das Verzeichnis
> namens verzeichnis1 davor. c.txt würde auch entpackt, aber ins Verzeichnis
> namens ZIELVERZEICHNIS/verzeichnis2.
>
> Das klappt also auch nur unter ganz bestimmten Umständen so, wie Du es
> haben willst (nämlich dann, wenn immer dieselbe Anzahl von Verzeichnisnamen
> vor dem Dateinamen kommt). Leider ist das die einzige Möglichkeit
> überhaupt, die im
> "Handbuch" zum
> tar-Befehl steht. Und andere Befehle unter Linux, die eine
> .tar.gz-Datei auspacken können, kenne ich nicht.
>
> Man kann sich vermutlich irgendein Skript basteln, was das Gewünschte mit
> den eingepackten Dateien hinkriegt, aber es wird nicht einfach sein. Und
> meine bescheidenen Skriptprogrammierkenntnisse reichen dafür nicht aus.
>
> Funktionieren würde die Sache mit "--strip-components=ZAHL" nur dann, wenn
> die auszupackenden Dateien alle gleich viele Verzeichnisnamen vor dem
> Dateinamen haben. Wenn also die Dateien
> verz1/a.txt
> verz1/b.txt
> verz1/c.txt
> in ARCHIVNAME.tar.gz stecken, könntest Du mit
tar --gzip -xvf
> ARCHIVNAME.tar.gz -C ZIELVERZEICHNIS --strip-components=1
alle drei
> Dateien in das Verzeichnis ZIELVERZEICHNIS entpacken, denn alle drei haben
> ja gleich viele Verzeichnisangaben vor dem Namen. Auch, wenn die Dateien
> verz1/a.txt
> verz1/b.txt
> noch_ein_anderes_verzeichnis/c.txt
> in der .tar.gz-Datei stecken, klappt es noch, denn auch wenn c.txt in einem
> anderen Unterverzeichnis steckt als a.txt und b.txt, so hat auch c.txt nur
> einen Verzeichnisnamen vor dem Dateinamen stehen. Der aber wird von
> "--strip-components" weggenommen, egal wie er heißt.
>
> Schwierig wird sowas aber, wenn z.B. die Dateien
> verz1/a.txt
> verz1/b.txt
> noch_ein_anderes_verzeichnis/b.txt
> heißen. Dann wird nur eine der beiden Dateien b.txt im Zielverzeichnis
> auftauchen. Ich weiß im Augenblick nicht mal genau, welche davon es ist:
> Die erste, die in der .tar.gz-Datei steht, oder vielleicht diejenige mit
> dem neuesten Datum? Ich habe das aus der tar-Anleitung (s.o.!) auch nicht
> herauslesen können.
Hallo,
ich danke euch!
ich habe nun folgende 'Umgehungslösung' gefunden:
ich entpacke alles in ein eigenes Verzeichnis
tar -xvzf /data/a/b/*.tar.gz -C /data2/
move die Daten aus den Unterverzeichnissen in bestimmtes verzeichnis
mv ./data2/a/b/*.txt ./data3/
und lösche anschließend die Ordner samt Unterordner
rm -rf ./data2/a/b/
Ben
gesamter Thread: