Pergunta

É possível listar o conteúdo de um arquivo lzma (.7zip) sem descompactar o arquivo inteiro? Além disso, posso extrair um único arquivo do arquivo LZMA?

Meu problema: eu tenho um arquivo de 30 GB .7Z que não compra para> 5TB. Gostaria de manipular o arquivo .7Z original sem precisar fazer um descompresas completas.

Foi útil?

Solução

Sim. Começar com XZ UTILS. Existem APIs Perl e Python.

Você pode encontrar o arquivo que deseja dos cabeçalhos. Cada arquivo é compactado separadamente, para que você possa extrair apenas o que deseja.

Outras dicas

Faça o download lzma922.tar.bz2 da página LZMA SDK na fonte do fonte, depois extraia os arquivos e abra C/Util/7z/7zmain.c. Lá, você encontrará rotinas para extrair um arquivo de arquivo específico de um arquivo .7Z. Você não precisa extrair todos os dados de todas as entradas, o código de exemplo mostra como extrair apenas o que você está interessado. Esse mesmo código tem lógica para listar as entradas sem extrair todos os dados compactados.

Eu resolvi esse problema instalando 7zip (https://www.7-zip.org/) e usando o parâmetro l. Por exemplo:

7z l file.7z

A saída possui algumas informações descritivas e a lista de arquivos nos arquivos compactados. Então, eu chamo isso dentro de Python usando a biblioteca de subprocessos:

import subprocess
output = subprocess.Popen(["7z","l", "file.7z"], stdout=subprocess.PIPE)
output = output.stdout.read().decode("utf-8")

Não se esqueça de garantir que o programa 7Z esteja acessível em sua variável de caminho. Eu tive que fazer isso manualmente no Windows.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top