tar - Remova os principais componentes de diretório na extração

104

Como você pode extrair apenas o dir de destino e não a árvore completa de dir?

comprimir

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

extrair

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

Isso produzirá:

/tmp/var/www/site

Como é possível evitar que toda a árvore de diretórios seja criada quando o arquivo é extraído?

O que eu quero extrair para:

/tmp/site
Clark
fonte

Respostas:

34

Por que não usar a -Copção ao criar:

$ tar cf /var/www/site.tar -C /var/www_bak/ site
quanta
fonte
1
TMTOWTDI. Isso seria muito trabalho, usando a mesma -Copção;)
MikeyB
12
Ele quer retirar o caminho de alguns componentes principais, não alterar o diretório de saída. Veja abaixo a resposta correta.
Aymericbeaumet
4
Não podemos usá-lo quando outra pessoa prepara o arquivo.
Porque `` _t = prefixo - $ (data +% Y% m% d); tar -cjf ".backups / $ _t.tar.bz2" --transform = "s # ^ (\ ./)? # $ _ t / # x;" -- arquivos...; tar -df ".backups / $ _ t.tar.bz2" --strip-components = 1 `` `
AnrDaemon
258

Você deseja usar a --strip-components=NUMBERopção de tar:

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

Seu comando seria:

tar xfz /var/www/site.gz --strip-components=2 -C /tmp
MikeyB
fonte
19
Essa resposta é melhor porque você não precisa pensar nisso antes da criação do alcatrão. Você pode usá-lo com um arquivo tar já criado. Obrigado @MikeyB!
Fabien Quatravaux
4
Tenho o prazer de informar que isso funciona tanto no GNU tar quanto no BSD tar.
Nathan Osman
4
e porque você pode não ser o criador tar ... (ou se você está fazendo isso com outra ferramenta e que ferramenta faz coisas tolas ...)
xenoterracide
você ainda pode estar ausente do --strip-componentssinalizador se estiver usando a implementação incorporada do busybox tar.
Sylvainulg
1
@FabienQuatravaux Bem, sim --- se você cometeu um erro e criou um arquivo que inclui diretórios principais que você não deseja ver durante a extração. Mas é mais claro criar o arquivo morto sem os principais diretórios indesejáveis.
Calaf