Come estraggo una directory specifica da un tarball? e spogliare una directory principale?


12

Voglio estrarre una directory specifica dal tarball di wordpress. in particolare wp-includesa .. Sembra che la struttura delle directory all'interno del tarball sia, wordpress/wp-includesma ho bisogno solo ./wp-includesuna volta che è stata estratta, nessuna directory wordpress principale. Come lo farei?

Risposte:


13

Per estrarre una directory specifica (e il suo contenuto, in modo ricorsivo), basta passarla come argomento aggiuntivo sulla riga di comando. Con GNU tar , è possibile rimuovere una directory principale con l' --strip-componentsopzione (e più in generale trasformare i nomi dei file con --transform). Su sistemi non Linux, puoi usare pax (è in POSIX, ma alcune distribuzioni Linux lo omettono dalla loro installazione predefinita) e la sua -sopzione.

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

È possibile unire l'elenco di inclusione con le regole di riscrittura aggiungendo una regola per riscrivere tutto con il nome vuoto (che significa "non estrarre"; la regola si applica solo se le regole precedenti non corrispondevano).

pax -r <foo.tar -pp -s '!^wordpress/\(wp-includes/\)!\1!' -s !.*!!

5

Supponendo che tu abbia GNU tar, puoi usare --strip-components:

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

Credo che supportino anche le versioni attuali di BSD tar --strip-components. Nel peggiore dei casi, potresti fare:

$ tar xzf tarball.tar.gz wordpress/wp-includes
$ mv wordpress/wp-includes .
$ rmdir wordpress

Ho finito per fare il secondo solo perché in fretta, ma è bello sapere che il primo esiste.
xenoterracide,

Sarebbe possibile utilizzare un comando che non richiede la denominazione esplicita del componente rimosso (ad es. wordpress)? Ne ho bisogno quando estraggo i tarball creati da GitHub che contengono la revisione git nel componente stripped che non conosco in anticipo.
tjanez,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.