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

Eu pensei tar archive.tar /users/mylocation funcionaria, mas não funciona. como posso fazer isso?

Para extrair um arquivo para um diretório diferente do atual, use o -C, ou --directory, opção de alcatrão, 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 manual (comando: man tar) para outras opções.

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

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

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

Outra opção é usar --one-top-level. Isso criará automaticamente um diretório com base no nome do arquivo 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

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

cd /tmpmkdir foldertouch folder/file.txt

quando você faz tar -zcvf folder.tar.gz folder tudo é como esperado = quando você untar agora ele vai ser untarred (pasta será criar, se você removeu) como /tmp/folder/.

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

@ Ujjwal Sing :na verdade, a página de manual do tar não é tão útil. Ele descreve"- C DIR “como” alterar Para diretório DIR". Pior ainda: "arquivo tar-c mydir xf.tar “não funciona, enquanto” arquivo tar xf.tar-c mydir " faz.

Além disso, ‘- C, --directory DIR\n change to directory DIR ‘deve ser descrito como’ alterar o diretório de saída para DIR (falhará se DIR não existir)’` Obrigado @ Mich . Veja também a resposta de @Bryan_Larsen.

@ PatMorin para ser justo, depois de entender as Convenções de chamada de argumento que você está usando, faz sentido. Você também pode fazer ’ arquivo tar xfC.tar mydir ’ ou ’ tar-c mydir-XF archive.alcatrao`. Está apenas misturando bandeiras de estilo tradicional e estilo GNU que quebram as coisas, como… é honestamente meio esperado. Bandeiras tradicionais são passadas como um blob como o primeiro argumento. Você não pode esperar que eles funcionem se não forem os primeiros. (Quero dizer, sim, é possível interpretá-lo de qualquer maneira-meu ponto é que estaria acima e além, não padrão)