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)