tar - Usuwa wiodące komponenty katalogu podczas rozpakowywania

104

Jak można wyodrębnić tylko katalog docelowy, a nie całe drzewo katalogów?

Kompresja

tar cf /var/www/site.tar /var/www_bak/site

wyciąg

tar xf /var/www/site.tar -C /tmp

Spowoduje to:

/tmp/var/www/site

Jak można uniknąć tworzenia całego drzewa katalogów podczas rozpakowywania pliku?

Do czego chcę to wyodrębnić:

/tmp/site
clarkk
źródło

Odpowiedzi:

34

Dlaczego nie skorzystać z -Copcji podczas tworzenia:

$ tar cf /var/www/site.tar -C /var/www_bak/ site
kwanty
źródło
1
TMTOWTDI. To też by działało, używając tej samej -Copcji;)
MikeyB
12
Chce usunąć ścieżkę z niektórych wiodących komponentów, a nie zmienić katalog wyjściowy. Prawidłowa odpowiedź znajduje się poniżej.
aymericbeaumet
4
Nie możemy go użyć, gdy ktoś inny przygotuje archiwum.
Ponieważ `` `t = prefiks - $ (data +% Y% m% d); tar -cjf ".backups / $ _ t.tar.bz2" --transform = "s # ^ (\ ./)? # $ _ t / # x;" -- akta...; tar -df ".backups / $ _ t.tar.bz2" --strip-components = 1 ``
AnrDaemon
258

Chcesz skorzystać z --strip-components=NUMBERopcji tar:

 --strip-components=NUMBER
       strip NUMBER leading components from file names on extraction

Twoje polecenie będzie:

tar xfz /var/www/site.gz --strip-components=2 -C /tmp
MikeyB
źródło
19
Ta odpowiedź jest lepsza, ponieważ nie musisz o tym myśleć przed utworzeniem tar. Możesz go użyć z już utworzonym plikiem tar. Dzięki @MikeyB!
Fabien Quatravaux
4
Miło mi poinformować, że działa to zarówno w tar GNU, jak i BSD.
Nathan Osman,
4
a ponieważ nie możesz być twórcą smoły ... (lub jeśli robisz to za pomocą innego narzędzia, a to narzędzie robi głupie rzeczy ...)
xenoterracide
może jednak nadal brakować --strip-componentsflagi, jeśli używasz implementacji osadzonej w tarbusyboksie.
sylvainulg
1
@FabienQuatravaux Cóż, tak --- jeśli popełniłeś błąd i utworzyłeś archiwum zawierające wiodące katalogi, których nie chcesz widzieć podczas rozpakowywania. Ale przede wszystkim łatwiej jest zbudować archiwum bez wiodących niepożądanych katalogów.
Calaf