Em várias ocasiões, digamos que eu tenha a.zip
, que se descompacta em a/*
si mesmo.
No entanto, muitas vezes existem arquivos zip que derramam todo o seu conteúdo no diretório atual. Isso exige que eu crie manualmente um diretor a
e descompacte nele.
Mas se como política eu sempre crio um diretório, e o zip acaba sendo do primeiro tipo, minha estrutura parece a/a/*
que não é a ideal.
Existe uma maneira de descompactar a.zip
independentemente a/*
de seu tipo entre os dois tipos que descrevi acima?
Use
zipinfo
para exibir, conteúdo zip.:No entanto, isso provavelmente não responde à sua pergunta se você estiver procurando por uma resposta de automação.
Edit: O que você pode fazer é verificar cada linha de saída de
zipinfo
um caractere de barra. Se houver uma linha faltando o caractere, você sabe que ele está localizado na raiz do arquivo zip.Infelizmente, não consigo pensar exatamente como fazer isso de cabeça. Não tenho certeza se funcionará, mas aqui está um comando não testado:
Editar: a sugestão de Mark Perryman é provavelmente melhor. Acabei de perceber que meu comando verifica se os arquivos estão contidos em subpastas, mas não verifica se todos estão contidos na mesma pasta raiz.
Tente isto:
Se estiver usando
zipinfo
, você pode espremer$has_parent
a linha para isso:A ideia é simples - se houver vários arquivos no nível raiz do arquivo, obviamente irá destruir seu diretório atual se você descompactá-lo, portanto, você deve criar um diretório pai com antecedência e descompactar os arquivos lá. Caso contrário, se todos os arquivos no arquivo tiverem o mesmo pai, não há problema em descompactar no diretório atual.