Ao tentar descompactar um arquivo com caminhos relativos acima do diretório de trabalho (por exemplo, ../../foo
), você recebe esta mensagem:
warning: skipped "../" path component(s) in ../../foo
inflating: foo
O problema é que nosso software está criando esses zips com caminhos relativos durante uma instalação e, se a instalação der errado, nós os descompactamos para colocar tudo de volta como estava. Se o usuário optou por armazenar alguns arquivos de dados "acima" do diretório de instalação normal, terminamos ../datafile
no backup. Isso deve funcionar perfeitamente, e queremos descompactar para confiar no arquivo e colocar os arquivos de volta, se solicitarmos. Infelizmente, não consigo encontrar uma opção para unzip
não me preocupar com os ../
componentes do caminho e descompactar o arquivo exatamente como ele foi criado. Existe uma opção de descompactar para fazer isso?
Observe que não é possível alterar a forma como os zips são criados no momento, portanto, "Não faça dessa maneira" não é uma resposta aceitável. Temos que jogar a mão que nos foi dada. A plataforma alvo é RHEL 5.
Responder1
Isso deve fazer o que você está pedindo
unzip -: foo.zip
Da página de manual
-: [todos exceto Acorn, VM/CMS, MVS, Tandem] permite extrair membros do arquivo para locais fora da '' pasta raiz de extração '' atual. Por razões de segurança, descompactar normalmente remove os componentes do caminho ''pai dir'' (''../'') dos nomes do arquivo extraído. Este recurso de segurança (novo para a versão 5.50) evita que o descompactação grave arquivos acidentalmente em áreas “sensíveis” fora do cabeçalho da árvore da pasta de extração ativa. A opção -: permite que unzip volte ao seu comportamento anterior e mais liberal, para permitir a extração exata de arquivos (antigos) que usavam componentes ''../'' para criar múltiplas árvores de diretórios no nível da pasta de extração atual. Esta opção não permite escrever explicitamente no diretório raiz (''/''). Para conseguir isso, é necessário definir a pasta de destino da extração como root (por exemplo, -d /). No entanto, quando a opção -: é especificada, ainda é possível escrever implicitamente no diretório raiz especificando componentes de caminho ''../'' suficientes dentro do arquivo zip. Use esta opção com extremo cuidado.