大きなフォルダを20Mbのファイルに圧縮する方法を探しています。 Zipファイルを小さいファイルに分割したくありません。代わりに、いくつかのサブファイル/フォルダーを、圧縮したときに20Mbのグループにグループ化したいと思います。
あなたがそうする方法を知っているなら、助けてください!
更新
単独で解凍できる小さなzipファイルのみを使用する必要があります。
私の意図は、大きなフォルダをスキャンするために virustotal.com を使用することです。
Winzipの場合:winzipを起動してwinzipに追加またはドラッグアンドドロップするか、ファイルを右クリックして[zipに追加...]を選択して、zipにファイルを追加します。
次にwinzipで:
アクション-「パーツサイズ」の下部で分割し、「その他のサイズ」を選択してから、20を入れてmbを選択します
できた!
あなたが提案しているのは、本質的には ナップザック問題 のバリエーションであり、ファイル圧縮のために、各アイテムが20MBの「ナップサック」の量を知ることから始めないという追加のひねりが加えられています。占める。
もちろん、簡単な解決策は、単純に各ファイルを個別にZip圧縮することですが、ファイル数を減らすことはできないので、満足のいく解決策ではないと思います。
この問題が発生した場合、各ファイルのおおよその圧縮サイズを取得できるようにするために、各ファイルを一時的な場所(またはディスクに書き込むことなくメモリ内)に個別に圧縮することから始めると思います。その情報を使用して、ナップザック問題への標準的なアプローチのいずれかによってグループ化するファイルを決定し、実際のZipファイルを作成することができます。
スクリプト言語が利用可能であり、その使用方法を知っているとすれば、このアプローチは自動化がかなり簡単であると思います。処理するファイルの数が少ない場合、手動で行うのは非常に退屈です。
Zipに分割を行わせると、自分でそれを理解するよりも自動化がはるかに簡単になります。目標が20MBのZipファイルの場合、アーカイブに追加する前に、各ファイルの圧縮サイズを見積もる必要があります。 Zipに分割を任せたくない理由はありますか? GNU Zipでそれを行う方法は次のとおりです。
Zip -s 20m -r myzip.Zip mydir
これにより、ファイル名に増分インデックス番号を含む20MBの圧縮ファイルが作成されます。
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の場合。
簡単な見通しではありません。
最近、DVDに簡単に保存できるように4.3GB以下のサブディレクトリにファイルを収集するスクリプトを書きましたが、これはすべて圧縮されていませんでした。
圧縮でそれを行う-今挑戦があります。ファイルのサイズを予測することはできません後圧縮-20MBを超えるまでファイルをZipにサイズの降順で追加し続け、最後のファイルを削除して、 20MBを下回るまで小さくなります。すべてのファイルを使い果たしても20 MBを超える場合は、最後のファイルをドロップして次のZipに進みます。
スクリプトのかなりトリッキーなビットと、かなり遅くて苦痛なプロセスです。
Daveは、OPが要求したものに最も近いプログラム可能なソリューションを提供しているようです 。 これは手動で行うこともできることも理解しました。次の仮定が行われた場合(これは純粋な技術的な問題ではなく、より多くの組織的技術的問題より):
このメソッドを 7-Zip (Windowsのインターフェイスとターミナル)で使用することで、新しく生成されたZipファイルの圧縮を維持しました。
すべてのファイルを空のフォルダー内の単一のZipファイルに圧縮することから始めます(希望する圧縮方法で)。 ALL.Zip
、そしてそれを開きます:
Test
ボタンを押して、それらの合計サイズを確認します(これは圧縮を考慮しています): Extract
またはCopy
ボタンを押しながら、抽出パスの最後に新しいフォルダーの名前を追加します(例:plu_8MB
)ALL.Zip
Zip内で、抽出したばかりのこれらのファイルを削除し(誤って再抽出しないようにします)、次のフォルダーまたはファイルのサブセットに移動します。ALL.Zip
のすべてのコンテンツを独立したフォルダーに抽出したら、そのZipを削除し、 そのフォルダーでターミナルを開きます ;タイプ:
for /F %i in ('dir /b') do "C:\Program Files\7-Zip\7z.exe" a -tzip %i.Zip %i
押す ENTER これにより、抽出したばかりのフォルダごとにZipファイルが生成されます。