Quero extrair uma subpasta específica (e todo o seu conteúdo) de um .zip usando a unzip
ferramenta padrão. Não estou interessado em seus diretórios pais e não quero que eles sejam criados.
Por exemplo:
unzip /path/to/archive.zip "var/www/html/example.com/*" -d ~/website
Gostaria que a ~/website
pasta contivesse apenas o conteúdo do example.com
arquivo, mas, na realidade, o unzip recria o caminho do diretório pai da pasta, então, na verdade, acabo com ~/website/var/www/html/example.com
.
Vi esta pergunta sobre como extrair uma pasta específica, mas ela não respondeu a essa pergunta.
Você sempre pode usar o libarchive
bsdtar
, que suporta extraçãozip
e muitos outros formatos de arquivamento e permite que você edite os caminhos dos arquivos após a extração usandosed
/pax
comos/regex/replacement/
:Como alternativa, o módulo
perl
'sArchive::Zip
tem umextractTree("subdir", "target")
que pode ser usado exatamente para isso:Se
var/www/html/example.com
não houver nenhum arquivo em subdiretórios, você também pode usar a-j
opção do utilitárioInfoZIP
'sunzip
que extrai os arquivos sem os principais componentes do diretório, simplificando a estrutura do diretório como em Descompactar o conteúdo do arquivo, mas sem criar uma pasta de arquivamento :Não, esse não é um recurso que
unzip
tenha. (Eu só tive que lerman unzip
para conferir, você deveria fazer isso também!)Você pode chamar unzip
-l
para primeiro obter uma lista de arquivos dentro do arquivo, filtrá-los comgrep
para o subdiretório desejado e, em seguida, executar um loop no resultado para chamarunzip
para extrair cada arquivo individual com a-c
opção de exibi-los em stdout e gravá-los no diretório de destino exatamente como você deseja.Isso, ou, você sabe, você faz um
mv
depois da extração.