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


13

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

(はい、できればzipが望ましい形式です)

回答:


23

-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」はすべてを一緒に解凍します。


これはどのバージョンのzipですか?? 取得file.z01 file.z02 ... file.zip unzip file.zipて直接動作しません(最初にzip -Fを使用して再結合します)。これらは要求どおりに「独立」していないことに注意してください。
sourcejedi

1
@sourcejedi:この回答(superuser.com/a/602736/195224)には、さらに詳細な説明があります。
mpy

@mpy私は知っている、私はちょうどその答えを書いた:)。
sourcejedi

@sourcejedi:ああ、そうですね、あなたはそれを言います;)
...-mpy

2

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]

なぜsplit -C--line-bytes)ではなくsplit -l--lines)を使用するのですか?1つのアーカイブに含まれるCSVファイルの数に関しては、より予測しやすいでしょう。
mpy

マンページのスキミングが速すぎました。おかげで、私はそれを修正します!
sourcejedi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.