web-dev-qa-db-ja.com

大きなフォルダーを20Mbに制限された小さなファイルに圧縮する方法は?

大きなフォルダを20Mbのファイルに圧縮する方法を探しています。 Zipファイルを小さいファイルに分割したくありません。代わりに、いくつかのサブファイル/フォルダーを、圧縮したときに20Mbのグループにグループ化したいと思います。

あなたがそうする方法を知っているなら、助けてください!

更新

単独で解凍できる小さなzipファイルのみを使用する必要があります。

私の意図は、大きなフォルダをスキャンするために virustotal.com を使用することです。

10
Nam G VU

Winzipの場合:winzipを起動してwinzipに追加またはドラッグアンドドロップするか、ファイルを右クリックして[zipに追加...]を選択して、zipにファイルを追加します。

次にwinzipで:

アクション-「パーツサイズ」の下部で分割し、「その他のサイズ」を選択してから、20を入れてmbを選択します

できた!

10
adolf garlic

あなたが提案しているのは、本質的には ナップザック問題 のバリエーションであり、ファイル圧縮のために、各アイテムが20MBの「ナップサック」の量を知ることから始めないという追加のひねりが加えられています。占める。

もちろん、簡単な解決策は、単純に各ファイルを個別にZip圧縮することですが、ファイル数を減らすことはできないので、満足のいく解決策ではないと思います。

この問題が発生した場合、各ファイルのおおよその圧縮サイズを取得できるようにするために、各ファイルを一時的な場所(またはディスクに書き込むことなくメモリ内)に個別に圧縮することから始めると思います。その情報を使用して、ナップザック問題への標準的なアプローチのいずれかによってグループ化するファイルを決定し、実際のZipファイルを作成することができます。

スクリプト言語が利用可能であり、その使用方法を知っているとすれば、このアプローチは自動化がかなり簡単であると思います。処理するファイルの数が少ない場合、手動で行うのは非常に退屈です。

6
Dave Sherohman

Zipに分割を行わせると、自分でそれを理解するよりも自動化がはるかに簡単になります。目標が20MBのZipファイルの場合、アーカイブに追加する前に、各ファイルの圧縮サイズを見積もる必要があります。 Zipに分割を任せたくない理由はありますか? GNU Zipでそれを行う方法は次のとおりです。

Zip -s 20m -r myzip.Zip mydir

これにより、ファイル名に増分インデックス番号を含む20MBの圧縮ファイルが作成されます。

5
SethG

Linuxには、まさにこれを行う zipsplit というプログラムがあります。これは、標準のZipパッケージの一部です。

次のように実行できます。

zipsplit bigfile.Zip -n 20000000

bigfile.Zipを最大20MBの部分に分割します。また、含まれる個々のファイルは分割されないことに注意してください。したがって、各パーツを個別に解凍できます。これは、最大パーツサイズに収まらない単一のファイルがある場合、分割ができないことも意味します。

更新:Windows用のバイナリもinfo-Zip.org、特に ftp://ftp.info-にあるようです。 Zip.org/pub/infozip/win32/Zip300xn-x64.Zip Win 64の場合。

4
Zitrax

簡単な見通しではありません。

最近、DVDに簡単に保存できるように4.3GB以下のサブディレクトリにファイルを収集するスクリプトを書きましたが、これはすべて圧縮されていませんでした。

圧縮でそれを行う-今挑戦があります。ファイルのサイズを予測することはできません圧縮-20MBを超えるまでファイルをZipにサイズの降順で追加し続け、最後のファイルを削除して、 20MBを下回るまで小さくなります。すべてのファイルを使い果たしても20 MBを超える場合は、最後のファイルをドロップして次のZipに進みます。

スクリプトのかなりトリッキーなビットと、かなり遅くて苦痛なプロセスです。

3
Majenko

Daveは、OPが要求したものに最も近いプログラム可能なソリューションを提供しているようですこれは手動で行うこともできることも理解しました。次の仮定が行われた場合(これは純粋な技術的な問題ではなく、より多くの組織的技術的問題より):

  1. OPでは、各Zipファイルがすべてのコンテンツを個別に抽出できる必要があるため、zip実行後に20 MBを超えるファイルは、次の方法:
    • それらは考慮されないため、分離する必要があります。
    • 他の回答が示唆しているように( winzip7-Zip )、20MBのボリュームに分割する必要があり、結果のファイルを個別に使用することはできません(これを壊す1st 仮定)。
  2. 圧縮ファイルは必ずしも正確に20MBである必要はありません。
  3. 約20MBのサイズの複数のZipファイルを用意することがより重要な場合は、圧縮せずにZipを実行できます。

このメソッドを 7-Zip (Windowsのインターフェイスとターミナル)で使用することで、新しく生成されたZipファイルの圧縮を維持しました。

すべてのファイルを空のフォルダー内の単一のZipファイルに圧縮することから始めます(希望する圧縮方法で)。 ALL.Zip、そしてそれを開きます:

  1. サイズまたはパックサイズ(圧縮)列をクリックして、ファイルとフォルダーのリストを注文します。
  2. 最小サイズから始めて、Zipにグループ化するファイル/フォルダーを選択します。
  3. Testボタンを押して、それらの合計サイズを確認します(これは圧縮を考慮しています): Test feature
  4. ExtractまたはCopyボタンを押しながら、抽出パスの最後に新しいフォルダーの名前を追加します(例:plu_8MB
  5. ALL.Zip Zip内で、抽出したばかりのこれらのファイルを削除し(誤って再抽出しないようにします)、次のフォルダーまたはファイルのサブセットに移動します。
  6. 以下のoneを繰り返します:
    • 独立したZipファイルを作成する場合は、手順1〜5。
    • 手順1〜3を実行し、同じフォルダ名を再利用して(手順4)、それらの合計サイズが約20 MBになるまで、
  7. ALL.Zipのすべてのコンテンツを独立したフォルダーに抽出したら、そのZipを削除し、 そのフォルダーでターミナルを開きます ;
  8. タイプ:

    for /F %i in ('dir /b') do "C:\Program Files\7-Zip\7z.exe" a -tzip %i.Zip %i
    

    押す ENTER これにより、抽出したばかりのフォルダごとにZipファイルが生成されます。

2
CPHPython

私はこれが古いスレッドであることを知っていますが、私は 7-Zip でこれを実行しました。

「ボリュームに分割」オプションを使用する必要があります。

enter image description here

2
Kevin Kuszyk