Criação múltipla de arquivos zip [autônomos]?

3

Como posso compactar automaticamente um grupo de arquivos em vários arquivos zip (digamos, 2 MB de tamanho para cada arquivo) e que cada arquivo zip é um arquivo zip independente? (ou seja, arquivos zip de vários volumes, que você não pode perder nenhum dos arquivos, caso contrário você não pode descompactar)

Existe alguma ferramenta disponível para isso? Na verdade eu só preciso agrupar os arquivos em vários grupos, 2mb cada um deles, zipado ou não zipado não importa

thx!

    
por im_chc 16.06.2010 / 13:18

4 respostas

1

Experimente uma ferramenta freeware chamada Bitser. É grátis e permite criar vários arquivos zip separados do explorador através do menu de contexto. É muito fácil, basta destacar os arquivos ou pastas no Explorer, clique com o botão direito e selecione "Add to Separate Zip"

www.bitser.org

    
por 12.11.2013 / 03:56
0

Você pode considerar colocar seus arquivos em um arquivo zip e, em seguida, usar o Divisor de arquivos do Adsen .

Editar:

Agora que penso nisso, isso provavelmente não é o que você queria ... Deixo assim mesmo.

    
por 16.06.2010 / 16:43
0

Uma técnica é criar um arquivo zip contendo tudo, depois usar o zipsplit (parte do software Info-ZIP livre / aberto) para dividi-lo em blocos de tamanho apropriado com a opção -n.

Esse link vai para uma página do Mac OS X, mas o software do Info-ZIP roda em praticamente todas as combinações de hardware / SO disponíveis desde os anos 80.

    
por 16.06.2010 / 17:47
0

Infelizmente, o zipsplit não funciona para arquivos acima de 2GB, então eu fui criticado com o mesmo problema. Por isso eu escrevi meu próprio script perl rápido e sujo, que faz o seu trabalho. Sua adiciona arquivos para o arquivo, desde que o arquivo + arquivo seja menor que o arquivo max. tamanho especificado:

# 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;
}
    
por 29.07.2014 / 16:23

Tags