Eu tenho um arquivo myarchive.zip que contém muitos diretórios, arquivos, etc. Digamos que esse arquivo myarchive.zip esteja em um diretório chamado "b". Bem, quando eu uso o comando "descompacte myarchive.zip", o sistema cria um diretório por padrão chamado "myarchive" com o conteúdo do arquivo zip. Eu não quero o sistema para criar este diretório "myarchive" - Eu só quero o conteúdo a ser extraído para o diretório "b". Isso é possível?
O que tenho feito agora é simplesmente emitir um comando "cp" para copiar os arquivos do diretório recém-criado (neste caso, "myarchive" para "b") para onde eu os quero.
unzip
não cria um diretório. Seu arquivo zip provavelmente tem o diretório em seu nível superior.mv
vez decp
.mv archive/* .; rmdir archive/
ou similar.Respostas:
Minha versão do
unzip
tem uma-j
opção para não criar nenhum diretório.tão
Extrairá todos os arquivos no diretório atual sem restaurar a estrutura de diretórios armazenada no
zip
arquivo.Se você desejar remover apenas um nível de diretórios do arquivo morto (extrair
myarchive/dir/file
comodir/file
, nãofile
), poderá usarbsdtar
(que suportazip
arquivos além detar
arquivos) e sua-s
opção.fonte
-j
a estrutura do diretório de arquivamento, não é recriado e todos os arquivos são depositados na pasta de extração. Isso significa que TODAS as subpastas são descartadas. Portanto, se você tivessezip/A/f1
,zip/A/B/f2
ezip/A/B/C/f3
você terminaria com uma única pasta com f1, f2, f3. Fica estranho se você tiver arquivos com o mesmo nome em diferentes subpastas. Normalmente, você deseja simplesmente soltar a pasta superior e não toda a estrutura de diretórios.Parece que isso é realmente simples com o bsdtar :
bsdtar --strip-components=1 -xvf file.zip
fonte
O que a resposta aceita não especifica como fazer, como você diz na pergunta, se você ainda deseja extrair para uma pasta específica sem usar os caminhos de pastas armazenados nos arquivos zip, pode usar a
-j
opção com a-d
opção desta maneira :ou para o seu caso
fonte
Se executar
unzip myarchive.zip
produz um diretóriomyarchive
com tudo nele, isso significa que o criador do arquivo zip realmente executou o zip nesse diretório.A única maneira de criar o que você deseja é apenas mover todo o conteúdo para fora do diretório depois de executar
unzip
:[user@host]:some/path/b$ unzip myarchive.zip
[user@host]:some/path/b$ ls
{ mostra diretóriomyarchive
}[user@host]:some/path/b$ mv myarchive/* .
[user@host]:some/path/b$ rm -R myarchive
[user@host]:some/path/b$ ls
{ mostra o primeiro nível de myarchive (diretamente emb
) }fonte
mv myarchive/.* .
mover todos os arquivos ocultos, como .gitignore e .htaccess.rm -R
e porque não está usando,ls -a
não está mostrando se há arquivos de ponto; Agora, o que acontece quando você executarm -R
e há arquivos de ponto? Você não os copiou, então eles estão perdidos. Você realmente deve consertar isso e talvez explicar a diferença, porque é algo que tropeçará bastante nos novatos; e considere o seguinte: e se não for um arquivo que eles têm? Ou, se eles adicionarem ao comando para excluir o arquivo morto, uma vez descompactado?rmdir
garantiria que ele estivesse vazio primeiro ... Mas se o usuário não souber sobre arquivos de ponto, os confundirá.