У GNU
tar
есть-C
(или--directory
) опция, которую вы можете использовать. Напримерtar -C /opt -x -z -f /tmp/my_file.tar.gz
или же
Вы можете использовать простую подоболочку. Например
(cd /opt; tar -xvzf /tmp/my_file.tar.gz)
после этого ваш текущий каталог по-прежнему
~/
действуетcd
только на подоболочку. Этот подход полезен для команд и утилит, у которых нет-C
опции или эквивалента.
Обратите внимание, что вы должны убедиться, что пути, хранящиеся в файле tar, являются относительными, а не абсолютными . Это определяется командой, используемой для создания файла tar. Вы можете проверить это, используя tar -tzf ...
и проверяя первый символ путей (например /foo/...
, это абсолютный путь foo/...
или ./foo/...
относительный). Будьте особенно осторожны, если запускаете это как root. Вы были бы в мире боли, если где-то в длинном списке относительных путей есть /etc/passwd
или хуже. Но посмотрите опцию GNU tar -P - это может не быть проблемой на вашей конкретной платформе. Я проверю внимательно, прежде чем продолжить.