web-dev-qa-db-ja.com

多くのファイルをいくつかのアーカイブに圧縮

Linuxを実行します。約150個の大きなCSVファイルのディレクトリがあります。単にZip -9それらをオンにすると、まだ大きすぎるモノリシックファイルになります。私は、それぞれを30〜40 CSVの4つまたは5つのZipファイルに単純に圧縮したいと思います。この方法では、各Zipが独立しているため、シーケンスまたはスパンされたZipの順序は問題になりません。これを行う簡単な方法があるはずです。助言がありますか?

(可能であれば、可能であればZipをお勧めします)

13
WorldsEndless

-sスイッチで十分ではありませんか? Zip -sを使用して、ファイルを最大サイズのファイルに分割できます。例:

"Zip -s 300m <2 gb file>"は以下を生成します:

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)

次に、「unzip file.Zip」ですべてを一緒に解凍します。

23
ranisalt

split入力ファイルのリスト上 :-)を使用します。

(テストされていません、クリーンアップのためにrmコマンドを含めました。注意してください)。

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]
2
sourcejedi