Compacte muitos arquivos em vários arquivos


13

Executando Linux. Eu tenho um diretório de cerca de 150 arquivos CSV grandes; simplesmente fazer um trabalho zip -9neles resulta em um arquivo monolítico ainda muito grande. Gostaria que simplesmente os compactasse em quatro ou cinco arquivos zip de 30 a 40 CSVs cada; dessa forma, o seqüenciamento ou a ordem de zip estendida não será um problema, pois cada zip é independente. Deve haver uma maneira simples de fazer isso. Alguma sugestão?

(e sim, zip é o formato preferido, se possível)

Respostas:


23

-S não é suficiente? Você pode usar zip -s para dividir o arquivo em arquivos de tamanho máximo, por exemplo:

"zip -s 300m <arquivo de 2 GB>" produz:

file.zip (300 mb, master file)
file.001.zip (300 mb)
file.002.zip (300 mb)
file.003.zip (300 mb)
file.004.zip (300 mb)
file.005.zip (300 mb)
file.006.zip (200 mb)

Em seguida, "descompactar arquivo.zip" descompactará tudo juntos.


Que versão do zip é essa ?? Recebo file.z01 file.z02 ... file.zip e unzip file.zipnão funciona diretamente (eu usaria o zip -F para recombiná-los primeiro). Observe que eles não são "independentes", conforme solicitado.
sourcejedi

1
@sourcejedi: Nesta resposta ( superuser.com/a/602736/195224 ) estão algumas explicações mais detalhadas.
Mpy #

@py, eu sei, acabei de escrever essa resposta :).
sourcejedi

@sourcejedi: Oh sim, agora você diz que ...;)
mpy

2

Use split na lista de arquivos de entrada :-).

(Não testado, incluí comandos rm para limpeza, tome cuidado).

ls *.csv > csvfiles
split -d -l30 - csvfiles < csvfiles
for i in csvfiles[0-9][0-9]; do
  zip "$i.zip" -@ < "$i"
done

rm csvfiles
rm csvfiles[0-9][0-9]

Por que você usa split -C( --line-bytes) e não split -l( --lines)? Isso seria mais previsível, com relação à quantidade de arquivos CSV em um arquivo morto.
Mpy

Eu olhei a página de manual muito rapidamente. Obrigado, eu vou consertar!
sourcejedi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.