Como extrair apenas uma pasta específica de um arquivo compactado compactado para um determinado diretório?

59

Como se extrai uma pasta específica de um arquivo compactado compactado para um determinado diretório?

Eu tentei usar

unzip "/path/to/archive.zip" "in/archive/folder/" -d "/path/to/unzip/to"

mas isso apenas cria a pasta no caminho para o qual eu descompacte e não faz mais nada.

Enkouyami
fonte

Respostas:

60
unzip <target-zip-file> '<folder-to-extract/*>' -d <destination-path> 

funciona bem no EL 6

processar
fonte
3
o que é esse EL 6?
Zelda
2
Enterprise Linux 6 (RHEL6) - Red Hat.
Slm
Isso também funciona; é basicamente a mesma resposta que a de Mark Adler, mas de uma maneira um pouco diferente.
Enkouyami
@Enkouyami Menos diferenças de citação, parece exatamente a mesma coisa.
Camilo Martin
11
@Enkouyami Porque a barra invertida entre aspas escapa de um caractere (supostamente o asterisco está sendo escapado, mas acho que é um erro de digitação), enquanto em aspas simples a barra invertida não é interpretada. Se alguém quiser uma barra invertida literal, "\\"seria usado (caso contrário, você sempre terá que lembrar quais caracteres são escapes especiais). Portanto, é uma diferença de citação se o autor quis dizer "citar o personagem glob" (desnecessário). De qualquer maneira, uma única barra invertida como essa é um erro de digitação.
Camilo Martin
39

Experimentar:

unzip /path/to/archive.zip 'in/archive/folder/*' -d /path/to/unzip/to
Mark Adler
fonte
4
fez isso? Eu recebo caution: filename not matched: foldername/\*quando eu corro unzip $repozip "$2-master/\*" -d /srv/www/magento/, onde $2é o nome da pasta no zip eu quero puxar todos os arquivos e pastas fora
jeremy.bass
10
Trabalhou sem \, apenas "path/*".
28414 Alex
8
Existe uma maneira de extrair o conteúdo de "in / archive / folder / *" que não preserva o caminho "em / archive / folder /"? Acabo usando mvdepois para obter arquivos onde eu precisava deles.
jerrygarciuh
6
Use -jpara isso.
Mark Adler
4
-jretira todas as informações do caminho e todos os arquivos entram na pasta de destino. Existe uma maneira de remover apenas a parte comum do caminho? Semelhante ao zip -r.
Bob Stein
6

As duas respostas existentes estão corretas, mas é um pouco complicado especificar o diretório de destino, que deve ser melhor esclarecido.

Digamos que /target/root/é o diretório de destino da ação de descompactação original, por exemplo:

unzip -qq src.zip -d "/target/root/"

Então, precisamos usar o mesmo /target/root/que o diretório de destino posteriormente, mesmo que desejemos extrair apenas um subdiretório específico, como o descompactamento funciona:

unzip -qq src.zip "sub/dir/*" "/target/root/"

Afinal, a regra é realmente simples, use o mesmo diretório raiz de destino para a -dopção .

BTW, a -qqopção é descompactar para ficar realmente silencioso, fique à vontade para removê-lo.

ryenus
fonte
Para sua informação: Fiz <kbd> descompactar -qq 2.3.zip "magento2-2.3 / vendor / *" "vendor /" </kbd> e recebi <kbd> cuidado: o nome do arquivo não corresponde: vendor / `</kbd>. Isso está em uma instalação do ubuntu no bash. Eu raramente descompacte, provavelmente fiz outra coisa errada ...
Chris K -