Come comprimere una grande cartella in piccoli file limitati a 20 Mb?


10

Sto cercando il modo di comprimere una grande cartella in molti file da 20 Mb. Non voglio che il file zip sia diviso in file più piccoli. Invece voglio raggruppare alcuni sotto file / cartelle in gruppi che sono 20 Mb quando compressi.

Se sai come farlo, ti preghiamo di aiutare!

Aggiornare

Devo usare solo i file compressi più piccoli che possono essere decompressi da soli.

La mia intenzione è quella di utilizzare virustotal.com per scansionare una grande cartella.


Qualche dettaglio sul sistema operativo che stai utilizzando?
Pitto

@Pitto Uso Windows 7
Nam G VU

Risposte:


10

In winzip: aggiungi i file alla zip avviando winzip e aggiungendo o trascinando e rilasciando in winzip o facendo clic con il tasto destro sui file e winzip 'aggiungi a zip ...'

Quindi in winzip:

Azioni - Dividi nella parte inferiore di "Dimensione parte", seleziona "Altre dimensioni", quindi inserisci 20 e seleziona mb

Fatto!


4
Rimanendo sul lato libero anche 7zip funziona perfettamente :)
Pitto

3
Questo dividerà il file zip e non possiamo usare da soli le parti divise.
Nam G VU

Omg ora capisco meglio cosa stai cercando ... Non riesco proprio a trovare alcun tipo di soluzione al tuo problema, quindi :( Che ne dici di usare il meraviglioso e gratuito Antimalware Malwarebytes per scansionare i file localmente?
Pitto

6

Quello che stai proponendo è essenzialmente una variazione del Problema dello Zaino , con la svolta aggiunta che, a causa della compressione dei file, non inizi a sapere quanto del tuo "Zaino" da 20 MB occuperà ogni articolo.

La banale soluzione, ovviamente, sarebbe semplicemente comprimere ogni file in modo indipendente, ma ciò non riesce a ridurre il numero di file, quindi sospetto che non sarebbe una soluzione soddisfacente.

Se mi venisse presentato questo problema, suppongo che inizierei comprimendo ciascun file singolarmente in una posizione temporanea (o in memoria, senza scriverli sul disco), solo per ottenere una dimensione compressa approssimativa per ciascuno. Con tali informazioni, sarebbe quindi possibile decidere quali file devono essere raggruppati in base a uno qualsiasi degli approcci standard al problema dello zaino e creare i file zip effettivi.

Supponendo che tu abbia un linguaggio di scripting a tua disposizione e tu sappia come usarlo, mi aspetto che questo approccio sia abbastanza semplice da automatizzare; farlo manualmente sarebbe piuttosto noioso se hai più di una manciata di file da gestire ...


1
non puoi comprimere con 'nessuna compressione'? Guardando l '"aggiornamento" dell'operazione sembra che il formato del file sia più importante della compressione.
Caro

1
Heh ... buon punto. Non avevo considerato l'uso di zip come un semplice archivio senza comprimerlo.
Dave Sherohman,

@DaveSherohman Quindi come possiamo farlo allora?
Nam G VU,

5

Consentire a zip di fare la divisione per te sarà molto più facile da automatizzare rispetto al tentativo di capirlo da solo. Se il tuo obiettivo è un file zip di 20 MB, dovrai stimare la dimensione compressa di ciascun file prima di aggiungerlo all'archivio. C'è un motivo per cui non vuoi lasciare che zip faccia la divisione per te? Ecco come lo faresti con gnu zip:

zip -s 20m -r myzip.zip mydir

Ciò creerà file compressi da 20 MB con numeri di indice incrementali nel nome file.


4
Sulla base del commento di OP a un'altra risposta, sembra che non voglia che zip lo divida automaticamente perché poi si ottiene un singolo archivio che richiede che tutti i file funzionino correttamente, ma vuole che ogni pezzo sia un archivio completo, utilizzabile, indipendente degli altri.
Dave Sherohman,

4

Su Linux esiste un programma chiamato zipsplit che fa esattamente questo. Fa parte del pacchetto zip standard.

Può essere eseguito in questo modo:

zipsplit bigfile.zip -n 20000000

per dividere bigfile.zip in parti di massimo 20 MB. E nota che i singoli file contenuti non saranno divisi. Pertanto ogni parte può essere decompressa individualmente. Ciò significa anche che se esiste un singolo file che non può adattarsi alla dimensione massima della parte, la divisione non sarà possibile.

Aggiornamento: sembra che ci siano anche file binari per Windows su info-zip.org, in particolare in ftp://ftp.info-zip.org/pub/infozip/win32/zip300xn-x64.zip per Win 64.


3

Temo non sia una prospettiva facile.

Di recente ho scritto uno script per raccogliere i file in sottodirectory non più grandi di 4,3 GB per una facile memorizzazione su DVD, ma tutto ciò non è stato compresso.

Farlo con la compressione: ora c'è la sfida. Non è possibile prevedere la dimensione dei file dopo la compressione: tutto ciò che si può fare è continuare ad aggiungere file allo zip in ordine decrescente di dimensione fino a quando non supera i 20 MB e quindi rimuovere l'ultimo file sostituendolo con uno più piccolo fino a quando non scende al di sotto di 20 MB . Se esaurisci tutti i file ed è ancora> 20 MB, lascia cadere l'ultimo file e passa allo zip successivo.

Un bel po 'di scripting e un processo piuttosto lento, doloroso.


Ecco il mio pensiero. Perché non raggruppare semplicemente file / cartelle in un gruppo decompresso <= 20Mb e comprimerli? Non abbiamo bisogno che i file dei risultati .zip siano esattamente 20 Mb ciascuno.
Nam G VU

Possibile - non sono sicuro di come lo faresti in Windows con gli script - ho usato Perl su Linux prima.
Majenko,

2

So che questo è un vecchio thread, ma l'ho appena fatto con 7-zip .

È necessario utilizzare l'opzione "Dividi in volume":

inserisci qui la descrizione dell'immagine


Freddo. Proverò e torno con te più tardi.
Nam G VU,

1
Non funziona per questo scenario specifico perché i file compressi più piccoli non possono essere decompressi da soli; devono essere tenuti insieme.
browly,

2

Dave sembrava fornire la soluzione programmabile più vicina a ciò che OP richiedeva. Ho capito che questo potrebbe essere fatto anche manualmente , se vengono prese le seguenti ipotesi (questo non è un puro problema tecnico - è più un problema organizzativo che tecnico):

  1. Poiché l' OP richiede che ciascun file zip sia in grado di estrarre tutti i suoi contenuti in modo indipendente , i file che superano i 20 MB dopo la compressione devono essere gestiti in uno dei seguenti modi:
    • non devono essere considerati e quindi devono essere separati;
    • devono essere suddivisi in volumi da 20 MB, come suggerito da altre risposte ( winzip , 7-zip ) e i file risultanti non possono essere utilizzati in modo indipendente (infrangendo questo primo presupposto).
  2. I file compressi non devono necessariamente avere esattamente 20 MB.
  3. Se è più importante disporre di più file zip con dimensioni approssimative di 20 MB, è possibile eseguire la compressione senza compressione.

Usando questo metodo con 7-zip (interfaccia e terminale di Windows) ho preservato la compressione nei file zip appena generati.

Inizia comprimendo tutti i file in un singolo file zip in una cartella vuota (con il metodo di compressione desiderato), ad esempio ALL.zip, e aprilo:

  1. Ordinare l'elenco di file e cartelle facendo clic sulla colonna dimensione o dimensione compressa (compressa);
  2. Inizia dalle dimensioni più piccole e seleziona i file / le cartelle che vuoi raggruppare in una zip;
  3. Premi il Testpulsante per confermare la loro dimensione collettiva (questo considera la loro compressione): Funzione di prova
  4. Premere il pulsante Extracto Copymentre si aggiunge alla fine del percorso di estrazione il nome di una nuova cartella (ad es . plu_8MB:)
  5. All'interno di ALL.zipzip, elimina questi file che hai appena estratto (evitando riestrazioni errate) e passa alla cartella o al sottoinsieme successivo di file;
  6. Ripeti una delle seguenti operazioni:
    • passaggi da 1 a 5 se si prevede di creare un file zip indipendente;
    • passaggi da 1 a 3 e riutilizzare lo stesso nome di cartella (passaggio 4) fino a quando le loro dimensioni collettive sono di circa 20 MB;
  7. Dopo aver estratto tutto il contenuto di ALL.zipin cartelle indipendenti, eliminare quella zip e aprire il terminale in quella cartella ;
  8. Genere:

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

    Premi ENTERe questo genererà un file zip per ogni cartella che hai appena estratto.


Per diversi parametri nella ricompressione, ecco la documentazione sulla sintassi 7zip .
CPHPython,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.