В 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 - это может не быть проблемой на вашей конкретной платформе. Я проверю внимательно, прежде чем продолжить.