L'altra risposta è corretta: non è possibile aggiornare correttamente un archivio tar compresso senza decomprimerlo. La documentazione relativa al tar GNU 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 dovessi essere interessato a una soluzione sporca che non richiede decompressione, posso fornirne una, in base alle seguenti osservazioni:
- L'aggiunta di flussi bzip2 mediante
cat
è supportata e produce un flusso bzip2 valido (lo stesso vale per gzip);
- aggiungere tars usando
cat
non produce un file tar valido, motivo per cui --concatenate
esiste l' opzione, ma possiamo chiedere a tar di far finta che sia valido:
Potrebbe sembrare più intuitivo desiderare o provare a utilizzare cat per concatenare due archivi invece di utilizzare l' --concatenate
operazione; 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 archivio. --concatenate
rimuove il marker di fine archivio dall'archivio di destinazione prima di aggiungere ogni nuovo archivio. Se usi cat per combinare gli archivi, il risultato non sarà un archivio in formato tar valido. Se è necessario recuperare i file da un archivio aggiunto all'utilizzo dell'utilità cat, utilizzare l' opzione --ignore-zeros
( -i
).
Sulla base di questa conoscenza, possiamo fare, ad esempio:
cat {one,two}.tar.bz2 >combined.tar.bz2
Questo risulta, come spiega lo snippet di documentazione sopra, in un file tar non valido, ma utilizzando --ignore-zeros
, può ancora essere letto completamente:
## 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, mentre omettendo -i
(correttamente) sono elencati solo i file dal primo archivio originale:
$ tar tf combined.tar.bz2
a
b
Ancora una volta, non è altro che un trucco sporco, ma potrebbe essere utile se controlli i lati di scrittura e lettura e puoi assicurarti che -i
verrà utilizzato quando tenti di leggere da file creati in questo modo.