it-swarm.dev

Jak extrahovat soubory do jiného adresáře pomocí příkazu 'tar'?

Myslel jsem tar archive.tar /users/mylocation by to fungovalo, ale ne. Jak to mohu udělat?

709
goovim

Chcete-li rozbalit archiv do jiného adresáře, než je aktuální, použijte -C nebo --directory, možnost tar, jako v

tar -xf archive.tar -C /target/directory

Před spuštěním příkazu musí cílový adresář existovat (lze jej vytvořit pomocí mkdir /target/directory).

Přečtěte si manuální stránka (příkaz: man tar) pro další možnosti.

994
Wesley Rice

Pokud váš tarball již obsahuje název adresáře, který chcete změnit, přidejte --strip-components=1 možnost:

tar xf archive.tar -C /target/directory --strip-components=1
265
Bryan Larsen

Kombinace předchozích odpovědí a komentářů:

Chcete-li jednoduše extrahovat obsah a vytvořit cílový adresář, pokud chybí:

mkdir -p /target/directory && tar xf archive.tar -C /target/directory

Chcete-li extrahovat a také odstranit kořenový adresář (první úroveň) v Zipu

mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1
31
Thamme Gowda

Další možností je použití - na nejvyšší úrovni. Tím se automaticky vytvoří adresář na základě názvu originálu.

tar zxvf filename.tgz --one-top-level

Navíc, pokud chcete, můžete zadat svůj vlastní a tar jej vytvoří automaticky.

tar zxvf filename.tgz --one-top-level=new_directory
23
Dean Householder

Zajímavé v souvislosti s těžbou je, že záleží na tom, jak jste vytvořili archiv, viz tento příklad

cd /tmp
mkdir folder
touch folder/file.txt

když uděláte tar -zcvf folder.tar.gz folder, vše je podle očekávání = když to nyní zrušíte, bude to untarred (složka bude vytvořena, pokud ji odstraníte) jako /tmp/folder/.

Když ale vytvoříte dehet jako tar -zcvf tmp-folder.tar.gz /tmp/folder A odznačíte jej ve složce/tmp, výsledkem bude adresář /tmp/tmp/folder! V takovém případě ji musíte zrušit na/- tar -xf tmp-folder.tar.gz -C /

2
Betlista

U dehtu 1.29 můžeme jednoduše přidat název adresáře za název souboru dehtu. Například,

tar zxvf tar-file directory-name/