Почему tar не извлекает в указанную директорию?

Вопрос или проблема

В моем терминале я в данный момент работаю в ~/tmp/testwiki, который содержит архив testwiki.tgz.

Когда я выполняю команду tar -xvf testwiki.tgz data/attic/ data/media/ data/media_attic/ data/media_meta/ data/meta/ data/pages/ -C ./storage, я ожидаю, что это извлечет указанные директории из архива tar и поместит их в ~/tmp/testwiki/storage, так что я получу:

~/tmp/testwiki/storage/data/attic
~/tmp/testwiki/storage/data/media
~/tmp/testwiki/storage/data/media_attic
...

…и так далее.

Однако, когда я выполняю эту команду, содержимое извлекается вместо этого в ~/tmp/testwiki/:

~/tmp/testwiki/data/attic
~/tmp/testwiki/data/media
~/tmp/testwiki/data/media-attic
...

Я попробовал следующие значения для аргумента -C:

  • storage/
  • storage
  • ~/tmp/testwiki/storage/
  • ./storage/
  • ./storage

Все они дают такой же результат: они извлекаются в рабочую директорию вместо ~/tmp/testwiki/storage.

Я хочу извлечь указанные директории и поместить их в заданное место. Что я упускаю в том, как сделать это через CLI?

Спасибо.

Ответ или решение

Вопрос, который вы подняли, касается использования утилиты tar для извлечения файлов из архива в указанный каталог. Судя по вашему описанию, несмотря на корректное использование флага -C, содержимое архива распаковывается в рабочем каталоге, а не в заданном вами. Давайте разберемся в том, почему это происходит, и как правильно извлекать файлы.

1. Понимание аргументов команды tar

Команда, которую вы используете:

tar -xvf testwiki.tgz data/attic/ data/media/ data/media_attic/ data/media_meta/ data/meta/ data/pages/ -C ./storage

включает следующие ключевые элементы:

  • -xvf: ключи -x указывают на извлечение, -v — на вывод процесса на экран, а -f говорит о том, что далее будет имя файла.
  • data/...: это специфические пути к директориям, которые вы хотите извлечь.
  • -C ./storage: флаг, который указывает tar, куда нужно извлекать указанные директории.

2. Почему происходит ошибка

Проверьте структуру архива

Одной из наиболее частых причин, по которым содержимое извлекается не в тот каталог, является структура самого архива testwiki.tgz. Когда вы создаете архив с помощью tar, он сохраняет абсолютные пути, которые могут включать родительские каталоги. Если архив был создан с абсолютными путями, это может привести к конфликту с вашими попытками извлечь его в относительные директории.

Проверка каталога назначения

Убедитесь, что каталог ~/tmp/testwiki/storage существует перед тем, как выполнять команду извлечения. Если он не существует, tar будет извлекать содержимое в текущий рабочий каталог.

3. Альтернативное решение

  • Создание директории: Перед извлечением убедитесь, что целевой каталог существует. Вы можете создать его с помощью:

    mkdir -p ./storage
  • Извлечение с использованием --strip-components: Если структура архива подразумевает под собой более глубокую иерархию, вы можете воспользоваться флагом --strip-components, чтобы игнорировать определённое количество уровней пути. Например:

    tar --strip-components=1 -xvf testwiki.tgz -C ./storage data/attic data/media ...

    Это позволит извлечь содержимое в указанный каталог, убирая из путей один уровень иерархии.

4. Проверка и диагностика

Чтобы диагностировать проблему с архивом, вы можете просмотреть его содержимое без извлечения:

tar -tvf testwiki.tgz

Это позволит вам увидеть, как структурированы файлы и каталоги в архиве, что поможет лучше понять, как корректно их извлечь.

Заключение

Проблема с извлечением содержимого архива tar может быть вызвана структурой самого архива или путями, которые вы указываете. Убедитесь, что целевая директория существует, и используйте флаг --strip-components, если необходимо. Эти шаги помогут вам корректно организовать извлечение файлов на вашем локальном компьютере.

Если вам потребуется более детальная помощь, не стесняйтесь обращаться за поддержкой.

Оцените материал
Добавить комментарий

Капча загружается...