Как извлечь отдельную папку и ее подпапки из "тарбола" (.tar.gz)

15046
mikey1980

Мне нужно извлечь одну папку и ее подпапки из tarball ( .tar.gz) на сервере CentOS. Я не имею ни малейшего понятия, как это сделать с помощью терминала SSH.

Я старался:

gunzip -c files_20100623.0110.tar.gz | tar -xvf home/bsisplas/public_html/staging/template/*.* 

Однако он не может найти файл в архиве. Кроме того, где в gunzipсинтаксисе вы указываете, куда должны идти извлеченные файлы? Я терминальный терминал Linux, если не сказать больше.

4
используйте tar с флагом -z ... он более чистый, чем трубопровод. и вам все равно придется долго ждать, так как архив будет полностью разархивирован перед извлечением matthias krull 14 лет назад 0

2 ответа на вопрос

6
coneslayer

Во-первых, когда вы используете -fопцию для tar, вам нужно дать ей аргумент, сообщающий имя файла архива. Поскольку вы кормите его из канала gunzip, мы используем -стандартный ввод:

gunzip -c files_20100623.0110.tar.gz | tar -xvf - home/bsisplas/public_html/staging/template/*.* 

Следующим моим пунктом будет то, что вам нужно только указать имя каталога. (Также: *.*обычно это DOS-изм. Если вы имеете в виду «все файлы» в Unix, просто напишите *. Если вы пишете, *.*вы говорите «все файлы с точкой где-то в их имени», что может исключать важные файлы без точки, как Makefileили README)

gunzip -c files_20100623.0110.tar.gz | tar -xvf - home/bsisplas/public_html/staging/template 

Это должно работать. Но вы можете немного упростить задачу, используя опцию tar's' -z, которая говорит, что она делает gunzipсама. Мы используем это и заменяем -имя входного файла на имя файла архива:

tar -xvzf files_20100623.0110.tar.gz home/bsisplas/public_html/staging/template 

Как это работает?

ну, я не получил ошибку, просто курсор просто сидел там, пока я не нажал ctrl-c ... оооооо, я действительно не хочу загружать 6 ГБ просто, чтобы получить несколько сотен К mikey1980 14 лет назад 0
Хм, как долго ты ждал? Если это 6 ГБ архив, это может занять некоторое время. Вы ничего не увидите, пока не доберетесь до нужных вам файлов. coneslayer 14 лет назад 0
если я использую вашу нижнюю строку, будет ли она извлечена в текущую папку или поверх исходных файлов ... это рабочий сервер, поэтому мне нужно убедиться, что он не заменяет оригиналы ... в папке tmp есть тот же каталог, что и архив ... это где я надеюсь разместить извлеченные файлы mikey1980 14 лет назад 0
@mikey: что ты скачиваешь? Вы упоминаете ssh, но похоже, что ваш tarball локальный. К сожалению, учитывая структуру файлов tar, вы должны сканировать все это, пока не найдете нужный файл. Это имело гораздо больше смысла во времена архивов магнитных лент. msw 14 лет назад 0
@ mikey1980 Откуда бы вы ни работали, он поместит файлы в home / bsisplas / ..., создавая эти каталоги при необходимости. Если вы хотите, чтобы эти каталоги создавались в `tmp`, проще всего было бы` cd tmp` перед запуском команды и изменить имя файла архива на `../ files_20100623.0110.tar.gz`. @ MSW Я думаю, что он ssh'ing на сервер, где 6 ГБ архив хранится локально, и, вероятно, хочет извлечь файлы для последующей передачи на другую машину. Таким образом, ему не нужно перемещать весь 6 ГБ архив на другую машину. coneslayer 14 лет назад 0
это не локально, наш другой программист настроил этот выделенный сервер, и он ежедневно получает резервные копии, используя CRS Job в этом архиве. mikey1980 14 лет назад 0
@coneslayer это извлекает внутри tmp (я думаю?!?) - теперь ждать, скрестив пальцы ... не могу вас отблагодарить! mikey1980 14 лет назад 0
3
Daenyth

Все, что вам нужно, это гудрон. Вы можете получить список файлов в архиве с -tпараметром, а затем распаковать как обычно, но с путем к файлу в качестве последнего аргумента:tar zxvf foo.tar.gz filepath

да, так просто. matthias krull 14 лет назад 0

Похожие вопросы