GNU/Linux >> Znalost Linux >  >> Linux

Přidání souboru do souborů TBZ

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í cat je podporován a vytváří platný proud bzip2 (totéž platí pro gzip);
  • připojování dehtů pomocí cat nevytváří platný soubor tar, proto --concatenate mož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. --concatenate odstraní 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.


Linux
  1. Jak extrahovat soubory .gz a .tar.gz v Linuxu

  2. Jak tarovat (komprimovat) soubory, s výjimkou určitých souborů nebo adresářů

  3. Vytvořit archiv Tar z adresáře, s výjimkou skrytých souborů?

  1. Jak přidat/aktualizovat soubor do existujícího archivu Tar.gz?

  2. Chyba Tar:Neočekávané EOF v archivu

  3. Extrahujte konkrétní soubory v archivu tar pomocí zástupného znaku

  1. extrahujte jeden soubor z velkého souboru tgz

  2. Zrušit archivaci a zároveň zmenšit velikost archivu?

  3. Formát indexovaného archivu?