Как извлечь одну папку из большого архива tar.gz?

Как извлечь одну папку из большого архива tar.gz?

Я использую эту команду на5ГБархив

tar -zxvf archive.tar.gz /folder/in/archive

это правильный способ сделать это? Кажется, это занимает целую вечность без вывода командной строки...

решение1

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 воляархивировать абсолютные пути. Поэтому всегда стоит проверять содержимое больших архивов перед извлечением.

Связанный контент