Jak extrahujete jednu složku z velkého archivu tar.gz?

Tento příkaz používám na 5 GB archive

tar -zxvf archive.tar.gz /folder/in/archive 

je to správný způsob? Zdá se, že to trvá věčně bez výstupu z příkazového řádku …

Komentáře

  • Použili jste absolutní nebo relativní cestu? Mělo by to být relativní, kromě toho to vypadá dobře. Jak dlouho jste to nechali běžet a jak dobrý je váš systém? Na rychlém stroji to bude trvat alespoň několik minut. Potenciálně hodinu nebo více? ' Provádím nyní test.
  • Ano, byl dokončen po ~ 1 hodině, ale absolutní cesta byla špatná, měli jste pravdu.
  • V systému Linux můžete sledovat, jak daleko do archivu tar je cat /proc/$(pidof tar)/fdinfo/0 (pokud máte více než jeden, upravte příkaz tar proces běží).
  • Důležitou součástí je také žádné koncové lomítko. Použití folder/folder2/ nebude fungovat '.

Odpovědět

tar ukládá relativní cesty ve výchozím nastavení . GNU tar dokonce říká, že pokud se pokusíte uložit absolutní cestu:

tar -cf foo.tar /home/foo tar: Removing leading `/" from member names 

Pokud potřebujete extrahovat konkrétní složku, podívejte se, co obsahuje soubor tar:

tar -tvf foo.tar 

A všimněte si přesného názvu souboru. V případě mého foo.tar souboru bych mohl extrahujte /home/foo/bar slovy:

tar -xvf foo.tar home/foo/bar # Note: no leading slash 

Takže ne, způsob, jakým jste zveřejnili, není (nutně) správný způsob, jak to udělat. Musíte vynechat úvodní lomítko. Pokud chcete simulovat absolutní cesty, proveďte nejprve cd / a ujistěte se, že jste superuživatelem. Stejné je to také:

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option 

Existují velmi zjevné a dobré důvody, proč tar převádí cesty na relativní. Jedním z nich je schopnost obnovit archiv na jiných místech, než je jeho původní zdroj. jiné je zabezpečení. Můžete extrahovat archiv, očekávat, že se jeho soubory objeví ve vašem aktuálním pracovním adresáři, a místo toho omylem přepsat systémové soubory (nebo vlastní práci) jinde.

Poznámka: pokud použijete -P možnost, tar bude archivovat absolutní cesty. Před extrahováním se tedy vždy vyplatí zkontrolovat obsah velkých archivů.

Komentáře

  • --strip-components=N zde může být pro některé užitečné.
  • v mém případě bylo nutné namísto iv id = „23 napsat ./foldername/ 16b5075f „>

, myslím, že to bylo proto, že když jsem vytvořil tar, vytvořil jsem ho pomocí tar -cvf santi.tar ./* a když jsem " uvedené " tar to je to, co řekl drwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/

  • a asi .gz?
  • @PeterKrauss změnit -xvf na -xzvf (přidání -z) a samozřejmě foo.tarfoo.tar.gz nebo jakkoli jiný název vašeho archivu. Totéž platí pro -j (bz2) a pro některé novější verze -J (xz). Jinak funguje také potrubí jako zcat foo.tar.gz | tar -xvf - ….
  • A pamatujte, že pokud vás unavuje veškerý podrobný výstup během extrakce, přeskočte v ve všech příkladech. Např. tar -tf foo.tar a tar -xf foo.tar ....
  • Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *