複数の[スタンドアロン] zipファイルの作成


3

ファイルのグループを自動的に複数のzipファイルに圧縮し(各ファイルのサイズが2MBになるように)、各zipファイルをスタンドアロンのzipファイルにする方法を教えてください。 (つまり、マルチボリュームのzipファイルではなく、いずれのファイルも失うことはできません。それ以外の場合は解凍することはできません)

利用可能なツールはありますか? 実際には、ファイルを2MBずつなど多くのグループにまとめる必要があります。zipされているかどうかは関係ありません。

THX!

回答:


1

Bitserというフリーウェアツールを試してください。無料で、コンテキストメニューからエクスプローラから複数の別々のzipファイルを作成できます。非常に簡単です。エクスプローラでファイルやフォルダをハイライトし、右クリックして[個別のzipに追加]を選択します。

www.bitser.org


これは、OPが説明したものとまったく異なりません。
PsychoData

0

あなたはそれからzipアーカイブにあなたのファイルを置くことを考えるかもしれません Adsenファイルスプリッタ

編集する

私はそれについて考える今これはおそらくあなたが望んでいたものではありません...私はとにかくそれを残します。


0

1つの方法は、すべてを含むzipファイルを作成してから、 ジップスプリット -nオプションを使用して適切なサイズのチャンクに分割するようにコマンド(free / open Info-ZIPソフトウェアの一部)。

このリンクはMac OS Xのマンページにありますが、Info-ZIPのソフトウェアは80年代以降に利用可能なハードウェアとOSのほぼすべての組み合わせで動作します。


0

残念ながら、zipsplitは2GBを超えるファイルでは動作しません。そのため、私は同じ問題に苛立ちました。そこで私は自分の手早く汚いperlスクリプトを書きました。 file + archiveがmaxよりも小さい限り、アーカイブにファイルを追加します。指定サイズ:

# Use strict Variable declaration
use strict;
use warnings;
use File::Find;

# use constant MAXSIZE    => 4700372992; # DVD File size
use constant MAXSIZE    => 1566790997; # File size for DVD to keep below 2GB limit
# use constant MAXSIZE    => 100000000; # Test

use constant ROOTDIR    => 'x:/dir_to_be_zipped'; # to be zipped directory

my $zipfilename    = "backup"; # Zip file name
my $zipfileext    = "zip"; # extension

my $counter = 0;
my $zipsize = undef;
my $flushed = 1;

my $arr = [];

find({wanted =>\&wanted, no_chdir => 1}, ROOTDIR);

flush(@{$arr});

# Callback function of FIND
sub wanted {
    my $filesize = (-s $File::Find::name);

    LABEL: {
        if ($flushed) {
            $zipsize = (-s "$zipfilename$counter.$zipfileext");
            $zipsize = 0 unless defined $zipsize;

            printf("Filesize Zip-File %s: %d\n", 
                "$zipfilename$counter.$zipfileext", $zipsize);

            $flushed = 0;

            if (($zipsize + $filesize) >= MAXSIZE) {
                $counter++;
                $flushed = 1;
                printf("Use next Zip File %d, Filesize old File: %d\n",
                    $counter, ($zipsize + $filesize));
                goto LABEL;
            }
        }
    }

    if ( $zipsize + $filesize  < MAXSIZE ) {
        printf("Adding %s (%d) to Buffer %d (%d)\n",
            $File::Find::name, $filesize, $counter, $zipsize);

        push @{$arr}, $File::Find::name;
        $zipsize += $filesize;
    }
    else {
        printf("Flushing File Buffer\n");
        flush(@{$arr});

        $flushed = 1;
        $arr = [];
        goto LABEL;

    }
}

# Flush File array to zip file
sub flush {

    # open handle to write to STDIN of zip call
    open(my $fh, "|zip -9 $zipfilename$counter.$zipfileext -@")
        or die "cannot open < $zipfilename$counter.$zipfileext: $!";

    printf("Adding %d files\n", scalar(@_));
    print $fh map {$_, "\n"} @_;
    close $fh;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.