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