Comprimi molti file in più archivi


13

Esecuzione di Linux. Ho una directory di circa 150 file CSV di grandi dimensioni; semplicemente eseguendo un zip -9risultato si ottiene un file monolitico che è ancora troppo grande. Mi piacerebbe semplicemente comprimerli in forse quattro o cinque file zip da 30-40 CSV ciascuno; in questo modo il sequenziamento o l'ordine zip esteso non sarà un problema, poiché ogni zip è indipendente. Ci deve essere un modo semplice per farlo. Eventuali suggerimenti?

(e sì, zip è il formato preferito, se possibile)

Risposte:


23

-S non è abbastanza interruttore? È possibile utilizzare zip -s per dividere il file in file di dimensioni massime, ad esempio:

"zip -s 300m <file da 2 GB>" produce:

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)

Quindi "unzip file.zip" decomprimerà tutto insieme.


Quale versione di zip è questa ?? Ottengo file.z01 file.z02 ... file.zip e unzip file.zipnon funziona direttamente (userei zip -F per ricombinarli prima). Nota che questi non sono "indipendenti" come richiesto.
sourcejedi,

1
@sourcejedi: in questa risposta ( superuser.com/a/602736/195224 ) ci sono alcune spiegazioni più dettagliate.
mpy,

@mpy lo so, ho appena scritto quella risposta :).
sourcejedi,

@sourcejedi: Oh sì, ora lo dici ...;)
mpy

2

Utilizzare split nell'elenco dei file di input :-).

(Non testato, ho incluso i comandi rm per la pulizia, attenzione).

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]

Perché usi split -C( --line-bytes) e non split -l( --lines)? Sarebbe più prevedibile, per quanto riguarda il numero di file CSV in un archivio.
mpy

Ho sfogliato la manpage troppo velocemente. Grazie, lo aggiusterò!
sourcejedi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.