opções em compactação com 7z

0

Eu quero criar um arquivo, através de um programa que estou escrevendo em C #, e depois descomprimi-lo.

O arquivo irá conter pastas de locais completamente diferentes, agrupados em 3 subdivisões principais.

Basicamente, o grupo A pode ter pastas \ x \ y \ z, \ x \ y \ m, \ x \ p \ q, o grupo B pode ter pastas \ x \ p \ r, \ x \ y \ t. .. Assim, a localização original pode dar apenas uma ligeira indicação da divisão, não posso usar o caminho para o agrupamento.

Eu estava esperando poder usar as opções 7z para colocar pastas em diferentes pastas dentro do zip, mas não consegui encontrar nenhuma dessas opções, então pensei em criar três zips dentro de um grande zip.

O problema que vejo é que a quantidade de dados é grande (centenas, milhares de GB) e, até onde eu sei, fechar o zip não é uma ótima idéia. (tipos de dados: principalmente tipo de imagem, podem ser tif ou outros formatos não compactados, mas também podem ser jpg)

Seria ótimo se eu pudesse fazer o zip sobre o rar ... Mas o 7z não usa o rar na compressão, apenas na descompressão.

Eu não quero ter que instalar vários programas - só instalarei 7z.

O 7z tem, para empacotar, as seguintes opções (do seu site): 7z, XZ, BZIP2, GZIP, TAR, ZIP e WIM. Eu usaria um deles para os arquivos internos e depois a opção 7z para o arquivo externo.

Qual é a melhor opção? (para obter um arquivo melhor que não crie um zip maior do que apenas fazendo tudo de uma só vez)

Editar: Windows!

    
por Thalia 23.07.2012 / 19:13

1 resposta

3

Se você estiver no Linux, poderá criar links simbólicos para os caminhos de pasta em seu disco rígido e adicionar essas pastas ao arquivo. Heck, você pode fazer isso no Windows com links simbólicos também.

Então, exemplo:

Você tem as pastas /a , /b , /c e /d (no Windows, isso seria C:\a , etc.)

Sua estrutura de pastas desejada dentro do arquivo é:

/SUBDIVISION-1/a
/SUBDIVISION-1/b
/SUBDIVISION-2/c
/SUBDIVISION-3/d

ou alguma divisão arbitrária das pastas entre subdivisões.

Então, quando você vai comprimir, você apenas

mkdir /SUBDIVISION-1
mkdir /SUBDIVISION-2
mkdir /SUBDIVISION-3

Então

ln -s /a /SUBDIVISION-1/a
ln -s /b /SUBDIVISION-1/b
ln -s /c /SUBDIVISION-2/c
ln -s /d /SUBDIVISION-3/d

e você pode ter um número arbitrário de diretórios dentro de cada subdivisão, de 0 a 1 a N .

No Windows, você não pode usar o comando ln ; você terá que usar o comando mklink .

Você precisará de um programa que seja inteligente o suficiente para seguir links simbólicos (no Linux), mas no Windows, ele deve ser automático ... o arquivo não deve simplesmente colocar um symlink nele; ele deve ter os dados encontrados depois de desreferenciar o link simbólico. Pelo menos é assim que deve ser se você usar o subsistema Win32 (o que eu acredito que o 7z faz).

Versão do Windows mediante solicitação implícita do OP (de cmd.exe shell):

mkdir C:\SUBDIVISION-1
mkdir C:\SUBDIVISION-2
mkdir C:\SUBDIVISION-3

Então

mklink /d C:\SUBDIVISION-1\a C:\a
mklink /d C:\SUBDIVISION-1\b C:\b
mklink /d C:\SUBDIVISION-2\c C:\c
mklink /d C:\SUBDIVISION-3\d C:\d
    
por 23.07.2012 / 19:24