Eu tenho um arquivo zipado como myArchive123.tar.gz
. Dentro, ele contém uma pasta comohelloWorld
Se eu extrair: tar -xf myArchive123.tar.gz
recebo a helloWorld
pasta:
ls
myArchive123.tar.gz
helloWorld
Gostaria que a saída tivesse o mesmo nome que o nome do arquivo menos a extensão .tar.gz. Ou seja:
tar <magic paramaters> myArchive123.tar.gz
ls
myArchive123.tar.gz
myArchive123
cd myArchive123
ls
helloWorld
Isso pode ser feito?
- Eu nunca sei o que há dentro do arquivo. Pode ser uma pasta, pode haver muitos arquivos.
- Eu ficaria bem em usar outra ferramenta se o tar não puder fazer isso.
- Eu ficaria bem com um formulário mais longo que pode ser transformado em um script
EDIT
Enquanto isso, hackeei um script que parece fazer o trabalho. (veja minha resposta postada abaixo). Se puder melhorar, sinta-se à vontade para postar comentários / respostas adicionais. O principal é que ele deve ser empacotado em uma linha como:
extract <file>
Respostas:
Com
gnu tar
, você pode usar--xform
(ou--transform
) para anexar previamente/prefix/
a cada nome de arquivo:nota que não há é líder
/
emprefix/
e assed
extremidades de expressão comS
a excluir alvos link simbólico de transformações de nome de arquivo.Para testá-lo (execução a seco):
Para começar, aqui está um script muito simplista que você pode chamar como
extract <file>
:fonte
Bem, você pode fazê-lo em pelo menos duas etapas. Se você fez
isso cumpriria a tarefa, embora ainda possa haver uma resposta mais compacta.
fonte
Editar
A resposta aceita é mais curta que a abaixo. (faça a mesma coisa, mas menor é geralmente melhor).
Acabei me hackeando um script para a tarefa em questão. funciona com .tar .tar.gz e .gz
Uso:
Observe que esta solução é capaz de pontos em um nome de arquivo. Por exemplo, Eclipse-4.5M-SDK.tar.gz.
Eu mantenho o script no meu repositório Git. Para a versão mais recente, consulte: https://github.com/LeoUfimtsev/ldts/blob/master/pathscripts/leo-tar-here
fonte
Mais uma solução possível é usar a
--transform
opção:Com seus arquivos:
fonte
--strip-components=0
simplesmente remove o primeiro nome do diretório do caminho e, com a-C
opção, armazena arquivos desarquivados no novo diretório.