Questão Como extrair arquivos para outro diretório usando o comando 'tar'?


eu pensei tar archive.tar /users/mylocation iria funcionar, mas isso não acontece. Como eu posso fazer isso?


582
2018-05-26 16:01


origem


Além disso, -C, --directory DIR\n change to directory DIR deve ser descrito como change output directory to DIR (will fail if DIR doesn't exist). Obrigado @Mich. Veja também a resposta de @ Bryan_Larsen. - valid
@Ujjwal Sing: De fato, a página man tar não é tão útil. Descreve "-C DIR" como "alteração no diretório DIR". Pior ainda: "tar -C mydir xf archive.tar" não funciona, enquanto "tar xf archive.tar-mydir" faz. - Pat Morin


Respostas:


Para extrair um arquivo para um diretório diferente do atual, use o -Cou --directory, opção tar, como em

tar -xf archive.tar -C /target/directory

Observe que o diretório de destino deve existir antes de executar esse comando (ele pode ser criado por mkdir /target/directory).

Leia o página de manual (comando: man tar) para outras opções.


842
2018-05-26 16:16



Você tem que criar o diretório manualmente embora. - Jürgen Paul
O caminho pode ser removido: ou seja, apenas recuperar o arquivo - zzapper
Se for um arquivo maior, quando você executar o comando, tudo o que você obterá será sem saída por vários segundos ou até mesmo minutos enquanto estiver funcionando. Você pode corrigir isso adicionando o -v bandeira (modo detalhado) que lista o nome de cada arquivo conforme ele é extraído. - IQAndreas
@consultstan xkcd.com/1168 - Duncan X Simpson
Não é incrível que, depois de todos esses anos, com todas as opções tar se acumulou, ainda não há uma opção para crie o diretório de saída se ele não existir? - EM0


Observe que, se o seu tarball já contiver um nome de diretório que você deseja alterar, adicione --strip-components=1 opção:

tar xf archive.tar -C /target/directory --strip-components=1

217
2018-05-21 18:32



Obrigado. Downloads via wget / etc sempre possuem um diretório 'pai'. Esta é a resposta completa imo - ou deve ser anotada na resposta acima. - bshea


Combinando as respostas e comentários anteriores:

Para simplesmente extrair o conteúdo e criar o diretório de destino, se estiver faltando:

mkdir -p /target/directory && tar xf archive.tar -C /target/directory

Para extrair e também remover o diretório raiz (primeiro nível) no zip

mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1

21
2018-06-27 19:29





Outra opção é usar - um nível superior. Isso criará automaticamente um diretório baseado no nome do arquivo do original.

tar zxvf filename.tgz --one-top-level

Além disso, se você quiser, você pode especificar o seu próprio e tar irá criá-lo automaticamente.

tar zxvf filename.tgz --one-top-level=new_directory

7
2018-03-22 21:49





Com o tar 1.29, podemos apenas adicionar o nome do diretório após o nome do arquivo tar. Por exemplo,

tar zxvf tar-file directory-name/

2
2018-06-29 23:00





O que achei interessante em relação à extração é que depende de como você criou o arquivo, veja este exemplo

cd /tmp
mkdir folder
touch folder/file.txt

quando você faz tar -zcvf folder.tar.gz folder tudo é como esperado = quando você o descompactar agora ele será descompactado (a pasta será criada, se você a removeu) /tmp/folder/.

Mas, quando você vai criar tar como tar -zcvf tmp-folder.tar.gz /tmp/folder e você descompactá-lo na pasta / tmp, o resultado será /tmp/tmp/folder diretório! Nesse caso, você tem que descompactá-lo para / - tar -xf tmp-folder.tar.gz -C /


1
2017-09-01 22:25