opções de 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 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 ... o local original pode dar apenas uma ligeira indicação da divisão, não posso usar o caminho para o agrupamento.

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

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

Seria ótimo se eu pudesse zipar 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 - instalarei apenas o 7z.

A 7z tem, para empacotamento, as seguintes opções (do site): 7z, XZ, BZIP2, GZIP, TAR, ZIP e WIM. Eu usaria um deles para os arquivos internos e, em seguida, 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)

Edit: Windows!

Thalia
fonte
Não está claro o que você está perguntando, se de fato há uma pergunta.
editado, espero ter deixado claro
Thalia
Eu faria tar.gz, honestamente. Crie um tarball de cada um dos grupos que você precisa e, em seguida, gzip o lote inteiro. No entanto, isso vai demorar muito tempo devido ao tamanho dos arquivos.
1
Eu faria tar.xz - o xzip usa essencialmente o mesmo algoritmo baseado em LZMA que o 7z, que comprime muito um corpus grande, especialmente se houver muitos dados repetidos em arquivos diferentes. Se você for usar o 7zip, use seu próprio formato .7z, pelo mesmo motivo.
fluffy
2
A maioria de vocês parece ter perdido de vista o problema / questão real no OP. O "problema", como ele afirmou, era que ele queria dividir tópicos separados por subpasta dentro do arquivo, mas como ele não via uma maneira de fazer isso usando o comando 7z, ele pensou em recorrer a arquivos zip aninhados. . Os arquivos zip aninhados não são um requisito de sua pergunta, apenas um artefato de sua confusão sobre a estrutura da pasta de arquivamento.
allquixotic

Respostas:

3

Se você está no Linux, você pode criar links simbólicos para os caminhos de pasta no 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 pastas /a, /b, /c e /d (no Windows isso seria C:\aetc.)

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 para 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 ln comando; você terá que usar o mklink comando em vez disso.

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 link simbólico lá; 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 (que eu inferir que o 7z faz).

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

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
allquixotic
fonte
Windows :-( Edite a minha pergunta também. Obrigado, vou tentar isso, não sei como do meu programa, mas é o que eu quero!
Thalia
Deve funcionar bem no Windows, você só tem que usar caminhos diferentes e um comando symlink diferente.
allquixotic
Depois de testar várias combinações, descobri que preciso ser um administrador para poder criar links simbólicos ... (???)
Thalia
Sim, correto. Ou instale o Cygwin e use sua emulação de link simbólico eo 7za compressor de lá ....
allquixotic
1
Nunca chame um comando de um programa quando você pode fazê-lo a partir do código ... adicionar uma dependência externa como essa torna seu código frágil e você depende da existência de arquivos, você encontra erros potenciais com caminhos de arquivo, você tem problemas com o programa downstream analisando opções de linha de comando, etc. Mantenha o código, APIs que você pode controlar e ver e depurar concretamente.
allquixotic