Eu tenho um arquivo chamado All CRGs.zip
e quero descompactar seu conteúdo em um diretório chamado data
(que já existe e tem alguns outros arquivos).
Isso é possível? Estou trabalhando no OSX.
Eu tentei:
$ unzip "All CRGs.zip" -d data/
Mas isso descompacta tudo o data/All CRGs
que não é o que estou procurando. Eu gostaria que tudo fosse direto data
.
Isso é possível?
Respostas:
Você pode recriar a estrutura de pastas completa , incluindo a
All CRGs
-Folder, ou pode omitir todas as pastas dentro do arquivo ZIP usando-j
-flag para o comando descompactar.O problema é que o arquivo ZIP foi criado usando
All CRGs
-Folder como de nível superiorzip "All CRGs.zip" "All CRGs"
. A maneira correta teria sidozip "All CRGs.zip" "All CRGs/*"
que teria criado um ZIP-Archive de todos os arquivos e pastas dentro daAll CRGs
-folder sem a pasta circundante.Portanto, a única maneira de extrair apenas os arquivos mantendo a estrutura de pastas seria algo como isto:
Ele descompactará a pasta completa e, depois disso, moverá o conteúdo da pasta para um nível acima e, finalmente, removerá a pasta "Todos os CRGs" (agora vazia).
fonte
All CRGs/*
as aspas, os arquivos são adicionados ao zip, mas com o diretório pai presente.mv
comando não moverá os arquivos ocultos.mv "data/All CRGs/.*" "data/"
é necessário um adicional .Como você sabe que o arquivo zip contém uma pasta de nível superior indesejada e como conhece o nome dessa pasta, você pode usar um link simbólico para fazer com que todo o conteúdo dessa pasta apareça no pai da seguinte maneira:
A
ln
etapa faz com que a pastadata/All CRGs
seja criada, vinculando ao diretório atual (relativo adata/
), que édata/
. Em seguida, quando você extrai arquivos deAll CRGs.zip
e ounzip
comando tenta criardata/All CRGs/file.dat
, esse arquivo será criado comodata/./file.dat
.Essa técnica pode ser demonstrada sem um arquivo zip usando o touch:
Você também pode usar esse truque para fazer com que certos arquivos ou pastas sejam extraídos para uma pasta alternativa:
Em seguida, qualquer coisa no arquivo extraído
subdir2
será exibida/tmp
.fonte