Comprimere e dividere contemporaneamente un grosso file con Tar, andata e ritorno

 

Mi è capitato di dover condividere un grosso file, quindi per poter fare l'upload su un web storage, ho dovuto dividerlo in più parti. Per fare questo si può usare tar per comprimere e dividere contemporaneamente il grosso file, e poi usare cat per la ricostruzione. Un esempio può essere il seguente:

 

$ tar zcf - grosso_file.avi.iso | split -b 200m - archivio.tgz

$ cat archivio.tgza* > unito.tgz

 

 

enjoy 😉

Autore: Franco Conidi aka edmond

Senior System Integrator, Network Administrator, Sys Admin Linux, Linux User, Consulente Informatico.

7 pensieri riguardo “Comprimere e dividere contemporaneamente un grosso file con Tar, andata e ritorno”

  1. “$ tar zcf – grosso_file.avi.iso | split -b 200m – archivio.tgz”

    Non stai comprimendo e dividendo CONTEMPORANEAMENTE, ma PRIMA comprimi (tar) e POI dividi (split)

    Ci vorrebbe una cosa come (mi pare) il vecchio arj o zip che che con un parametro apposito (qualcosa come –volume) comprimava su volumi, tipicamnte floppy chiedendoti di metterli uno alla volta.

  2. Ah ok, la solita questione di lana caprina,
    non contemporaneamente ma prima uno e poi l’altro….. va bè 🙂

  3. Precisino…. credo ti sia sfuggita l’opzione “z” di tar che vuol dire: “comprimi l’archivio con gzip”.
    Il comando “tar zcf – grosso_file.avi.iso | split -b 200m – archivio.tgz” è equivalente a “tar cf – grosso_file.avi.iso | gzip –to-stdout – | split -b 200m – archivio.tgz”
    Per cui tar prende tutti i file, li mette insieme, e filtra il risultato con gzip – ovvero gliedo dà in pasto sullo stdin poi prende l’output di gzip e lo butta sul suo output; split lo prende e lo separa. split separa un file gzip che contiene un unico file: l’archivio tar. Inoltre la shell crea subito tutte e due i processi – tar e split – che lavorano in parallelo. Fintanto che tar riesce a dargli dati split lavora. Che poi split non faccia la gestione dell’espulsione del dispositivo fisico quello è vero.
    In realtà tar ha già tutto quello che serve, sotto forma delle opzioni –new-volume-script –multi-volume .
    Vedi al riguardo https://www.gnu.org/software/tar/manual/html_chapter/Media.html#SEC151
    È molto, molto più flessibile di arj o zip.

  4. edmond, mi pare che precisino non conosca bene il funzionamento delle pipe e delle shell unix.
    In realtà i tre processi lavorano in parallelo e contemporaneamente… tar accorpa i file, gzip ne comprime il flusso e split lavora sul flusso di tar.
    Se poi usi la gestione multi volume di tar non hai bisogno di split….
    E non vengono creati file temporanei sul disco…

  5. @Paolo
    mi sembra che tu abbia detto tutto quello che c’era da dire 😉
    per quanto riguarda la gestione multi volume, me la devo rivedere
    dato che non l’ho mai usata.

  6. se il file è un
    “grosso_file.avi.iso”
    man split
    e risparmi tempo,
    visto che avi, mkv, jpeg eccetera NON si comprimono affatto ulteriormente.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *