GNU/Linux >> Linux Esercitazione >  >> Linux

Aggiunta di file ai file tbz

Mentre tar può aggiungere file ad un archivio già esistente, non può essere compresso. Dovrai bunzip2 l'archivio compresso, lasciando un tarball standard. Puoi quindi utilizzare tar capacità di aggiungere file a un archivio esistente e quindi ricomprimere con bzip2 .

Dal manuale:

 -r      Like -c, but new entries are appended to the archive.  Note that this only
         works on uncompressed archives stored in regular files.  The -f option is
         required.

L'altra risposta è corretta:non è possibile aggiornare correttamente un archivio tar compresso senza decomprimerlo. La documentazione di GNU tar lo suggerisce e il tentativo di aggiornamento fallisce con un messaggio di errore esplicito:

$ tar --concatenate --file=cat.tar.bz2 two.tar.bz2 
tar: Cannot update compressed archives
tar: Error is not recoverable: exiting now

Tuttavia, se sei interessato a una soluzione sporca che non richiede decompressione, posso fornirne una, sulla base delle seguenti osservazioni:

  • Aggiunta di flussi bzip2 utilizzando cat è supportato e produce un flusso bzip2 valido (lo stesso vale per gzip);
  • aggiungendo tar usando cat non produce un file tar valido, motivo per cui il file --concatenate opzione esiste, ma possiamo chiedere a tar di far finta che sia valida:

Potrebbe sembrarti più intuitivo voler o provare a usare cat per concatenare due archivi invece di usare il --concatenate funzionamento; dopo tutto, cat è l'utilità per combinare i file.

Tuttavia, gli archivi tar incorporano un marcatore di fine file che deve essere rimosso se gli archivi concatenati devono essere letti correttamente come un unico archivio. --concatenate rimuove il contrassegno di fine archivio dall'archivio di destinazione prima che ogni nuovo archivio venga aggiunto. Se usi cat per combinare gli archivi, il risultato non sarà un archivio in formato tar valido. Se hai bisogno di recuperare file da un archivio che è stato aggiunto utilizzando l'utility cat, usa --ignore-zeros (-i ) opzione.

Sulla base di questa conoscenza, possiamo fare, ad esempio:

cat {one,two}.tar.bz2 >combined.tar.bz2

Ciò si traduce, come spiega il frammento di documentazione sopra, in un file tar non valido, ma utilizzando --ignore-zeros , può ancora essere letto integralmente:

## Show contents of `one.tar.bz2'
$ tar tf one.tar.bz2
a
b

## Show contents of `two.tar.bz2'
$ tar tf two.tar.bz2
c

## Show contents of `combined.tar.bz2', bypassing the bad format
$ tar tif combined.tar.bz2
a
b
c

Nota come quanto sopra elenca tutti e tre i file dai due archivi originali, omettendo -i (correttamente) elenca solo i file del primo archivio originale:

$ tar tf combined.tar.bz2 
a
b

Ancora una volta, non è altro che uno sporco trucco, ma potrebbe essere utile se controlli sia la parte di scrittura che quella di lettura e puoi assicurarti che -i verrà utilizzato quando si tenta di leggere da file creati in questo modo.


Linux
  1. Come estrarre i file .gz e .tar.gz in Linux

  2. Creare un archivio Tar di una directory, ad eccezione dei file nascosti?

  3. Come aggiungere/aggiornare un file a un archivio Tar.gz esistente?

  4. Come gzippare più file in un unico file gz?

  5. Estrai file specifici in un archivio tar utilizzando un carattere jolly

Come creare file Tar Gz

Comando tar di Linux – Come comprimere file in Linux

Come eseguire il tar di tipi di file specifici (estensioni) in una directory

Comando tar di Linux per comprimere ed estrarre file

Estrai il file tar.gz in Linux

Formato archivio indicizzato?