Як віджати tar.gz в іншому каталозі


270

У мене є архів

* .tar.gz

Як розблокувати це в каталозі призначення?


9
Чому всі потоки? Варіантів більше, ніж просто -C (і, можливо, його версія цього не передбачає).
Альфе

2
Переповнення стека - це сайт для програмування та питань розробки. Це питання видається поза темою, оскільки мова не йде про програмування чи розробку. Дивіться, які теми я можу запитати тут, у довідковому центрі. Можливо, краще користуватися питаннями Super User або Unix & Linux Stack Exchange .
jww

@jww Хоча я бачу вашу думку, у нас на цьому форумі також є теги з назвою tarта gzнавколо . Витяг тарболу в певний каталог може бути частиною сценарію оболонки і, отже, частиною програмування. Я думаю, що таке питання можна задавати на будь-якому форумі.
Альфа

Відповіді:


319

Ви можете скористатися опцією -C(або, --directoryякщо ви віддаєте перевагу довгі варіанти), щоб вказати цільовий каталог на ваш вибір, якщо ви використовуєте версію Gnu tar. Каталог повинен існувати:

mkdir foo
tar -xzf bar.tar.gz -C foo

Якщо ви не використовуєте tarздатний витягнути в певний каталог, cdперед викликом ви можете просто увійти в ваш цільовий каталог tar; тоді вам, звичайно, доведеться дати повний шлях до свого архіву. Ви можете зробити це в підширці для визначення обсягу, щоб уникнути впливу навколишнього сценарію:

mkdir foo
(cd foo; tar -xzf ../bar.tar.gz)  # instead of ../ you can use an absolute path as well

Або якщо ні абсолютний шлях, ні відносний шлях до архівного файлу не підходить, ви також можете використовувати це для того, щоб назвати архів поза межами діапазону скопірування:

TARGET_PATH=a/very/complex/path/which/might/even/be/absolute
mkdir -p "$TARGET_PATH"
(cd "$TARGET_PATH"; tar -xzf -) < bar.tar.gz

107
gzip -dc archive.tar.gz | tar -xf - -C /destination

або, з дьогтем GNU

tar xzf archive.tar.gz -C /destination

3
Мені подобається поняття використання gzipв тому випадку, якщо дьоготь не розуміє заархівовані архіви.
Альфе

4

Витяги myArchive.tar до / призначенняDirectory

Команди:

cd /destinationDirectory
pax -rv -f myArchive.tar -s ',^/,,'

0

Ви можете використовувати для циклу, щоб вилучити кілька файлів .tar.gz до іншої папки. Наступний код буде приймати / призначення / папку / шлях як аргумент до скрипту та знімає всі файли .tar.gz, наявні в поточному місці в / призначення / папці / шляху.

if [ $# -ne 1 ];
 then
 echo "invalid argument/s"
 echo "Usage: ./script-file-name.sh /target/directory"
 exit 0
fi
for file in *.tar.gz
do
    tar -zxvf "$file" --directory $1
done
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.