extrair apenas o conteúdo de uma pasta específica de um arquivo compactado para um determinado diretório

extrair apenas o conteúdo de uma pasta específica de um arquivo compactado para um determinado diretório

Isso está muito próximo do SOComo extrair apenas uma pasta específica de um arquivo compactado para um determinado diretório? Preciso de algo próximo, mas sempre pego a pasta com o conteúdo, não é só o conteúdo. Foi o que foi sugerido:

 #note $2 is passed in and would be == "magefoler"
 unzip /srv/file.zip "$2-master/*" -d /srv/www/mage/

O que eu preciso fazer para pegar um zip que tenha essa estrutura

file.zip
 |-magefoler-master/
 |-magefoler-master/app/*tons of files
 |-magefoler-master/skin/*tons of files

e preciso movê-lo para outra pasta, mas não consigo mover magefoler, só quero as pastas appe skin. Isso não significa que sempre serão essas duas pastas, apenas que qualquer conteúdo filho, arquivo ou pasta, é magefolero que eu preciso retirar. O que se tenta evitar é exportar tudo para uma pasta e depois movê-lo de lá.

O resultado final que estou procurando é o arquivo zip que envio para a /magepasta assim:

/srv/www/mage/
     |--/mage/app/*tons of files
     |--/mage/skin/*tons of files

Responder1

Você não pode simplesmente descompactar aqui:

$ unzip /srv/file.zip "$2-master/*" -d /srv/www/

E então mova/renomeie a pasta magefoler-masterpara mage:

$ mv /srv/www/magefoler-master /srv/www/mage

Alternativas?

Ao pesquisar exatamente esse problema no passado, só consegui encontrar dois métodos adicionais para fazer algo assim sem precisar recorrer ao uso do mv.

  1. Usando FUSE como Gilles sugere aqui:Como posso forçar o unzip/zip a não criar um subdiretório ao extraí-lo?
  2. Usando a ferramenta zipnotepara mover os arquivos dentro do arquivo zip, antes de extraí-los.

informação relacionada