Использование tar для распаковки файла в каталог, в то время как оболочка находится где-то еще

360
Karl Morrison

Я думал, что на этот вопрос было бы просто ответить, но везде, где бы я ни находился, ВСЕ ожидают, что tar будет находиться в том же каталоге, что и оболочка.

Мой файл находится:

/tmp/my_file.tar.gz 

Я хочу извлечь его в следующий каталог:

/opt/ 

Моя оболочка в настоящее время находится по адресу:

~/ 
0

1 ответ на вопрос

4
RedGrittyBrick
  1. У GNU tarесть -C(или --directory) опция, которую вы можете использовать. Например

    tar -C /opt -x -z -f /tmp/my_file.tar.gz 

    или же

  2. Вы можете использовать простую подоболочку. Например

    (cd /opt; tar -xvzf /tmp/my_file.tar.gz) 

    после этого ваш текущий каталог по-прежнему ~/действует cdтолько на подоболочку. Этот подход полезен для команд и утилит, у которых нет -Cопции или эквивалента.

Обратите внимание, что вы должны убедиться, что пути, хранящиеся в файле tar, являются относительными, а не абсолютными . Это определяется командой, используемой для создания файла tar. Вы можете проверить это, используя tar -tzf ...и проверяя первый символ путей (например /foo/..., это абсолютный путь foo/...или ./foo/...относительный). Будьте особенно осторожны, если запускаете это как root. Вы были бы в мире боли, если где-то в длинном списке относительных путей есть /etc/passwdили хуже. Но посмотрите опцию GNU tar -P - это может не быть проблемой на вашей конкретной платформе. Я проверю внимательно, прежде чем продолжить.