web-dev-qa-db-ja.com

サイズ制限のあるファイルを圧縮するにはどうすればよいですか?

フォルダからファイルをZipするスクリプトがあります。 zipファイルが10 MB以下であることを確認したい。サイズが10MBを超える場合は、別のZipファイルが作成されます。

これに使用できるコマンド(または他の方法)はありますか?

23
Vishnu

"-split-size"オプションを使用して、 "Zip"自体の "split archive"機能を使用できます。

「Zip」のマンページ(「man Zip "):

(...)

分割アーカイブの1つの使用法は、複数のリムーバルに大きなアーカイブを保存することです
可能なメディア。 20の分割ファイルがある分割アーカイブの場合、ファイルは標準です
通常の名前(ARCHIVEをアーカイブの名前で置き換え)AR‐
CHIVE.z01、ARCHIVE.z02、...、ARCHIVE.z19、ARCHIVE.Zip。ことに注意してください
最後のファイルは.Zipファイルです。

(...)

-s分割サイズ
-分割サイズsplitsize

分割サイズは、オプションで乗数が続く数値です。
現在、数値は整数でなければなりません。乗数は
現在、k(キロバイト)、m(メガバイト)、g(ギガバイト)、
またはt(テラバイト)。 64kは最小分割サイズであるため、数値
乗数なしのデフォルトはメガバイトです。たとえば、
fooと呼ばれる分割アーカイブをバーの内容で作成します
書き込みに役立つ可能性がある670 MBの分割があるディレクトリ
CDでは、コマンド:

                Zip -s 670m -r foo bar

使用することができます。

したがって、分割Zipアーカイブを作成するにはの場合、次のようにできます( "-r "は、ディレクトリのサブディレクトリを含めるための「再帰的」スイッチです):

$ Zip -r -s 10m archive.Zip directory/

ファイルを解凍するには、「Zip」のマンページでは、「-s 0`」スイッチを使用する必要があると説明されています。

(...)

 Zip -s 0 split.Zip --out unsplit.Zip

分割されたアーカイブを単一ファイルのアーカイブに変換します。

(...)

したがって、最初にZipファイルの「unsplit」に「-s 0 "スイッチを使用します。

$ Zip -s 0 archive.Zip --out unsplit.Zip

...そしてあなたnsplit fileを解凍:

$ unzip unsplit.Zip

22
ricmarques
tar -czvf - /path/to/files | split -b 10M - archive.tar.gz

あなたにいくつかのファイルを与えるでしょう:

archive.tar.gzaa

archive.tar.gzab

...

次に、次のコマンドで圧縮解除できます。

cat archive.tar.* | tar -xzvf -
8

これが私が5 GBのファイルに対して実行した方法です(OPが要求したように、1 GBと10 MBに分割されます)...

例:5GBファイル1GBファイルに分割するにはFAT32 USBにコピーする(ファイル名 "FIVE_GB_FILE.ISO")

ステップ1:ファイルを圧縮(圧縮なし、ソースと同じディレクトリ)

Zip -0 FIVE_GB_FILE.Zip FIVE_GB_FILE.ISO

ステップ2:5GB Zipファイルを1GB Zipファイルに分割します

Zip -s 1000m SPLIT_5GB_FILES FIVE_GB_FILE.Zip

出来上がり...次の1GBファイルが必要です(元のファイル、およびステップ1のZip)。

SPLIT_5GB_FILES.Zip
SPLIT_5GB_FILES.Z01
SPLIT_5GB_FILES.Z02
SPLIT_5GB_FILES.Z03
SPLIT_5GB_FILES.Z04
3
Jay Marm