entpacke 'tar', ändere aber den Verzeichnisnamen, in den extrahiert werden soll


26
tar -tf filename.tar
folder1/file
folder1/name
[...]

Ich möchte die Datei und den Namen in Ordner 2 extrahieren . Kann das als Einzeiler gemacht werden?

Antworten:


35

Verwenden Sie -Cund --strip-components(siehe man tar).

Beispiel:

mkdir FOLDER
# for remote tar file
curl -L ’remote_tar_file' | tar -xz - -C FOLDER --strip-components=1

# for local tar file
tar -xzf FILENAME -C FOLDER --strip-components=1

Erläuterung:

Das -CFlag setzt voraus, dass bereits ein Verzeichnis vorhanden ist, sodass der Inhalt der TAR-Datei darin erweitert werden kann. daher die mkdir FOLDER.

Das --strip-componentsFlag wird verwendet, wenn sich eine TAR-Datei auf natürliche Weise in einen Ordner erweitern würde, beispielsweise in github, in dem sie Beispiele für repo-name-masterOrdner enthält. Natürlich müssten Sie den hier erstellten Ordner der ersten Ebene nicht so --strip-componentseinstellen 1, dass er diesen ersten Ordner automatisch für Sie entfernt. Je größer die Anzahl ist, desto tiefer verschachtelte Ordner werden entfernt.


Ich las man tar. Ich habe es nicht bemerkt --strip-components. schön
Felipe Alvarez

1
tar-1.14 benutzt --strip-path, tar-1.14.90 + benutzt --strip-components. Möglicherweise Problem hier?
Mikhail Moskalev

Ich würde dem zustimmen, wenn es ein Beispiel gäbe und nicht nur die Schalter, wie im Online-Handbuch angegeben , 3 Argumentstile, die Verwirrung stiften .
Iain

Habe das -f auf tar -xz vergessen, denkt ich. Für mich gescheitert. Ich dachte, ich hätte das die ganze Zeit ohne Grund benutzt ...
John Carrell

17

Sie können auch die --transformOption für ein bisschen mehr Flexibilität verwenden. Es akzeptiert alle Sed-Ersatzoperationen.

So extrahiere ich beispielsweise einen Linux-Tarball in ein neues Verzeichnis, damit ich einen Patch anwenden kann:

tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.