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

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

/tmp/my_file.tar.gz

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

/opt/

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

~/

1 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .