Zatímco tar může přidávat soubory do již existujícího archivu, nelze jej komprimovat. Budete muset bunzip2 komprimovaný archiv, takže zůstane standardní tarball. Poté můžete použít tar schopnost přidávat soubory do existujícího archivu a poté znovu komprimovat pomocí bzip2 .
Z návodu:
-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.
Druhá odpověď je správná:nemůžete správně aktualizovat komprimovaný archiv tar, aniž byste jej rozbalili. Dokumentace GNU tar to naznačuje a pokus o aktualizaci selže s explicitní chybovou zprávou:
$ tar --concatenate --file=cat.tar.bz2 two.tar.bz2
tar: Cannot update compressed archives
tar: Error is not recoverable: exiting now
Nicméně pokud byste měli zájem o řešení typu špinavé práce, které nevyžaduje dekompresi, mohu vám ji poskytnout na základě následujících pozorování:
- Připojování streamů bzip2 pomocí
catje podporován a vytváří platný proud bzip2 (totéž platí pro gzip); - připojování dehtů pomocí
catnevytváří platný soubor tar, proto--concatenatemožnost existuje, ale můžeme požádat tar, aby předstíral, že je platný:
Může se vám zdát intuitivnější chtít nebo zkusit použít cat ke spojení dvou archivů namísto použití
--concatenateúkon; koneckonců cat je nástroj pro kombinování souborů.Archivy tar však obsahují značku konce souboru, která musí být odstraněna, pokud mají být zřetězené archivy správně načteny jako jeden archiv.
--concatenateodstraní značku konce archivu z cílového archivu před připojením každého nového archivu. Pokud ke spojení archivů použijete cat, výsledkem nebude platný archiv ve formátu tar. Pokud potřebujete načíst soubory z archivu, který byl přidán pomocí nástroje cat, použijte--ignore-zeros(-i).
Na základě těchto znalostí můžeme udělat například:
cat {one,two}.tar.bz2 >combined.tar.bz2
Výsledkem je, jak vysvětluje fragment dokumentace výše, neplatný soubor tar, ale s použitím --ignore-zeros , lze jej stále plně číst:
## 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
Všimněte si, jak výše uvádí seznam všech tří souborů z původních dvou archivů, zatímco vynechává -i (správně) uvádí pouze soubory z prvního původního archivu:
$ tar tf combined.tar.bz2
a
b
Opět to není nic jiného než špinavý trik, ale mohl by být užitečný, pokud ovládáte zápis i čtení a můžete se ujistit, že -i bude použito při pokusu o čtení ze souborů vytvořených tímto způsobem.