verfaßt von baeuchlein, 18.02.2013, 16:40:11
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.
gesamter Thread: