Zipar muitos arquivos em vários arquivos

9

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

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

    
por WorldsEndless 01.06.2013 / 22:27

2 respostas

20

O switch 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, "unzip file.zip" descompactará tudo junto.

    
por 02.06.2013 / 10:08
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 02.06.2013 / 12:29