Wie extrahiere ich ein bestimmtes Verzeichnis aus einem Tarball? und ein führendes Verzeichnis entfernen?

12

Ich möchte ein bestimmtes Verzeichnis aus dem WordPress-Archiv extrahieren. speziell wp-includeszu .. Es scheint, dass die Verzeichnisstruktur innerhalb des Tarballs ist, wordpress/wp-includesaber ich brauche nur, ./wp-includessobald es extrahiert wurde, kein führendes WordPress-Verzeichnis. Wie würde ich das machen?

Xenoterracid
quelle

Antworten:

13

Um ein bestimmtes Verzeichnis (und seinen Inhalt rekursiv) zu extrahieren, übergeben Sie es einfach als zusätzliches Argument in der Befehlszeile. Mit GNU tar können Sie ein führendes Verzeichnis mit der --strip-componentsOption entfernen (und im Allgemeinen die Dateinamen mit transformieren --transform). Auf Nicht-Linux-Systemen können Sie pax (in POSIX, aber einige Linux-Distributionen lassen es von ihrer Standardinstallation aus) und dessen -sOption verwenden.

tar xf foo.tar --strip-components=1 wordpress/wp-includes  #GNU tar
pax -r <foo.tar -pp -s '!^wordpress/!!' wordpress/wp-includes

Sie können die Einschlussliste mit den Umschreiberegeln zusammenführen, indem Sie eine Regel anhängen, um alles auf den leeren Namen umzuschreiben.

pax -r <foo.tar -pp -s '!^wordpress/\(wp-includes/\)!\1!' -s !.*!!
Gilles 'SO - hör auf böse zu sein'
quelle
5

Angenommen, Sie haben GNU-Teer, können Sie Folgendes verwenden --strip-components:

$ tar xaf tarball.tar.gz --strip=1 wordpress/wp-includes

Ich glaube, dass aktuelle Versionen von BSD-Teer auch unterstützen --strip-components. Im schlimmsten Fall können Sie Folgendes tun:

$ tar xzf tarball.tar.gz wordpress/wp-includes
$ mv wordpress/wp-includes .
$ rmdir wordpress
cjm
quelle
Ich habe letztere gemacht, nur weil ich es eilig habe, aber gut zu wissen, dass erstere existiert.
Xenoterracid
Wäre es möglich, einen Befehl zu verwenden, bei dem die entfernte Komponente nicht explizit benannt werden muss (z. B. wordpress)? Ich brauche dies, wenn ich von GitHub erstellte Tarballs extrahiere, die die Git-Revision in der entfernten Komponente enthalten, die ich vorher nicht kenne.
Tjanez