
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 app
e skin
. Isso não significa que sempre serão essas duas pastas, apenas que qualquer conteúdo filho, arquivo ou pasta, é magefoler
o 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 /mage
pasta 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-master
para 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
.
- Usando FUSE como Gilles sugere aqui:Como posso forçar o unzip/zip a não criar um subdiretório ao extraí-lo?
- Usando a ferramenta
zipnote
para mover os arquivos dentro do arquivo zip, antes de extraí-los.