Вопрос или проблема
В моем терминале я в данный момент работаю в ~/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
, если необходимо. Эти шаги помогут вам корректно организовать извлечение файлов на вашем локальном компьютере.
Если вам потребуется более детальная помощь, не стесняйтесь обращаться за поддержкой.