tar
сохраняет относительные пути по умолчанию . GNU tar даже говорит, что если вы попытаетесь сохранить абсолютный путь:
tar -cf foo.tar /home/foo
tar: Removing leading `/' from member names
Если вам нужно извлечь конкретную папку, посмотрите, что находится в файле tar:
tar -tvf foo.tar
И обратите внимание на точное имя файла. В случае моего foo.tar
файла я мог извлечь /home/foo/bar
, сказав:
tar -xvf foo.tar home/foo/bar # Note: no leading slash
Так что нет, то, как вы разместили (не обязательно) правильный способ сделать это. Вы должны опустить ведущий слеш. Если вы хотите смоделировать абсолютные пути, сделайте это cd /
сначала и убедитесь, что вы являетесь суперпользователем. Кроме того, это делает то же самое:
tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option
Есть очень очевидные, веские причины, почему tar
преобразует пути в относительные. Одним из них является возможность восстановить архив в местах, отличных от его исходного источника. Другой - это безопасность. Вы можете извлечь архив, ожидать, что его файлы появятся в вашем текущем рабочем каталоге, и вместо этого переписать системные файлы (или вашу собственную работу) в другом месте по ошибке.
Примечание: если вы используете эту -P
опцию, tar
будут заархивированы абсолютные пути. Поэтому всегда стоит проверить содержимое больших архивов перед извлечением.