Extrai apenas um arquivo específico de um arquivo zipado para um determinado diretório

126

Eu preciso extrair um único arquivo de um arquivo ZIP para o qual eu conheço o caminho. Existe um comando como o seguinte:

unzip -d . myarchive.zip path/to/zipped/file.txt

Infelizmente, o comando acima extrai e recria todo o caminho para o arquivo em ./path/to/zipped/file.txt . Existe uma maneira de eu simplesmente puxar o arquivo para um diretório especificado?

    
por Naftuli Kay 01.06.2011 / 01:14

4 respostas

106

Você pode extrair apenas o texto para a saída padrão com a opção -p :

unzip -p myarchive.zip path/to/zipped/file.txt >file.txt

Isso não extrairá os metadados (data, permissões,…), somente o conteúdo do arquivo. Esse é o preço a pagar pela conveniência de não ter que mover o arquivo depois.

Como alternativa, monte o arquivo como um diretório e copie o arquivo. Com o AVFS :

mountavfs
cp -p ~/.avfs"$PWD/myarchive.zip#"/path/to/zipped/file.txt .

Ou com o zip por fusível :

mkdir myarchive.d
fuse-zip myarchive.zip myarchive.d
cp -p myarchive.d/path/to/zipped/file.txt .
fusermount -u myarchive.d; rmdir myarchive.d
    
por 01.06.2011 / 01:43
119
unzip -j "myarchive.zip" "in/archive/file.txt" -d "/path/to/unzip/to"

Digite o caminho completo do arquivo compactado, não apenas o nome do arquivo. Certifique-se de manter a estrutura conforme vista no arquivo zip.

Isso extrairá o arquivo único file.txt in myarchive.zip to /path/to/unzip/to/file.txt .

    
por 04.12.2012 / 07:49
16

Versão mais simples:

unzip ARCHIVE_NAME PATH_OF_FILE_INSIDE_ARCHIVE

Isso irá recriar PATH_OF_FILE_INSIDE_ARCHIVE no diretório atual, mas apenas extrairá o arquivo especificado.

Para listar todos os arquivos em um arquivo Zip:

unzip -l ARCHIVE_NAME
    
por 08.07.2013 / 12:31
1

No macOS , que por padrão usa Info-zip

Primeiro, liste os arquivos para encontrar o que você deseja

unzip -l my.zip

Em seguida, forneça uma lista de arquivos para extrair do arquivo

unzip my.zip nameOfFileToExtract
    
por 28.04.2017 / 11:22

Tags