Criar diretório de destino ao extrair tarball

25

É possível criar um diretório de destino, semelhante a mkdir -p, onde eu possa definir um diretório de destino inexistente no meu comando tar, e o tar criará o diretório para mim?

Eu sei que posso redirecionar a saída para um diretório usando tar -C /target/dir, mas isso não funcionará se o diretório de destino não existir.

wulfgarpro
fonte
4
Se não for possível, você sempre poderá criar um alias de shell.
N0pe

Respostas:

38
mkdir -p /target/dir && tar -C /target/dir
V para V
fonte
3
Sem alimentação de colher, direto e direto ao ponto.
Amado Martinez
10
Alteração menor sugerida:mkdir -p /target/dir && tar -C $_
Mark Melville
@MarkMelville nos descreve o que $ _ deveria fazer aqui
Suhayb
@Shahayb $_é um parâmetro especial no Bash que se expande para o último argumento do comando anterior.
ConceptRat
13
tar -xvf bash.html_node.tar.gz --one-top-level

Na página de manual do comando tar

--one-top-level[=DIR]

    Extraia todos os arquivos no DIR ou, se usado sem argumento, em um subdiretório nomeado pelo nome base do arquivo morto (menos os sufixos de compactação padrão reconhecidos por --auto-compress).

----- teste

teste 1

tar zxvf ../aaa.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree aaa
aaa/
├── 111
└── 222

// se o nome tgz for igual ao root_dir do archive, nenhum outro efeito

teste 2

mv ../aaa.tgz ../bbb.tgz

tar zxvf ../bbb.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree bbb
bbb
└── aaa
    ├── 111
    └── 222

// se o nome tgz não for o mesmo que root_dir do archive, crie um diretório de nível superior

Alaa Ahmad M. Zakaria
fonte
3
Requer tar GNU? O tar padrão do bsd do Mac não tem essa opção.
Curtis Yallop
1
Sim, isso deve ser mencionado mais claramente.
kcrisman 7/11
5

Isso fez mais sentido para mim: mkdir -p /create/folder && tar -zxf haroopad-v0.13.0_x64.tar.gz -C /create/testfolder

mkdirfaz a pasta, embora eu não entenda bem a -popção. &&permite executar um segundo comando. Eu usei switches tar típicos, mas no final -Cé usado para alterar diretórios e extrair para o local necessário.

referência: extrair-arquivos-contidos-em-arquivo-tar-gz-para-novo-diretório-nomeado-arquivo

Gr4cchus
fonte
2
A opção -p não emitirá um erro se o diretório já existir.
David
O @David também criará os principais diretórios inexistentes, ou seja, criará /createse não existir.
Antonio Pérez
1

Se você não conhece os caminhos a serem criados ...
Obtenha os caminhos necessários no arquivo tar e crie-os ...

for P in \`tar tvf tarfile.tar |tr -s [:space:] |cut -d' ' -f6\`; do  
    C=\`echo "${P: -1}"\`  #get the last character  
    if [ $C = '/' ]; then  
        echo "Found directory: $P"  
        mkdir -p $P  
    fi  
done
ckroger
fonte