it-swarm-eu.dev

Přidat / aktualizovat soubor do existujícího archivu tar.gz?

Existuje způsob, jak přidat/aktualizovat soubor v archivu tar.gz? V zásadě mám archiv, který obsahuje soubor na /data/data/com.myapp.backup/./files/settings.txt a rád bych tento soubor vytáhl z archivu (již hotový) a po dokončení úprav jej po návratu do archivu znovu zatlačil. Jak to mohu dosáhnout? Je to problematické kvůli . na cestě?

78
Naftuli Kay

Formát souboru dehtu je jen řada souborů zřetězených společně s několika záhlavími. Rozbíjení, rozdělování obsahu a opětovné sestavení není složité. Jak již bylo řečeno, popsal Jander jak dehet jako program nemá obslužné funkce, které by to provedly, a existují další komplikace s kompresí, která musí před i po provedení změny.

Existují však nástroje pro tuto práci! Existují nejméně dva systémy, které vám umožní provést zpětný svazek komprimovaného archivu dehtu do složky a poté provést změny v systému souborů. Až budete hotovi, odpojte složku a váš komprimovaný archiv je připraven k převrácení.

První možností by byl projekt archivemount pro Fuse . Zde je návod na to . Váš systém pravděpodobně již má pojistku a pokud tomu tak není, vaše distribuce by měla mít pro to možnost.

Druhou možností je tarfs . Je to jednodušší použití , ale slyšel jsem, že má nějaké potíže s poškozením archivů bzip2, takže byste to mohli nejprve důkladně vyzkoušet.

18
Caleb

Chcete-li soubor stáhnout z archivu, můžete použít tar xzf archive.tar.gz my/path/to/file.txt. Upozorňujeme, že budou vytvořeny také adresáře v cestě souboru. Použijte tar t (tj. tar tzf archive.tar.gz) pro výpis souborů v archivu.

tar nepodporuje "in-place" aktualizaci souborů. Můžete však přidat soubory na konec archivu, i když mají stejnou cestu jako soubor již v archivu. V takovém případě budou obě kopie souboru v archivu a později přidaný soubor přepíše předchozí. Příkaz, který k tomu použijete, je tar r (nebo tar u použít pouze příkazy, které jsou novější než archiv). The . v cestě by neměl být problém.

Existuje však háček: do komprimovaného archivu nelze přidat. Takže byste museli udělat:

gunzip archive.tar.gz
tar rf archive.tar data/data/com.myapp.backup/./files/settings.txt
gzip archive.tar

Což pravděpodobně není to, co chcete slyšet, protože to znamená přepsat celý archiv dvakrát. Pokud se nejedná o příliš velký archiv, mohlo by být lepší rozbalit celou věc a po úpravě ji znovu dehovat. Alternativně můžete použít nekomprimovaný archiv.

48
Jander

Tar byl původně určen k použití pro pásky, takže „nahrazení“ souborů není ve skutečném designu. Můžete však použít --delete k odstranění souboru z původního dehtu a potom -u aktualizovat dehet a znovu přidat soubor. Může to chvíli trvat, protože dehet potřebuje interní reorganizaci archivu.

9
rleibman