LinuxForum.Fans
Тема

Как быстро извлечь файл из 40Гб - ного архива tar.gz

Автор: riso 14 сообщений 4348 просмотров
#241852

Сабж. Имеется бэкап хостинга, в 40 Гб, в архиве очень много мелких файлов (сайты же), Мне нужно вытянуть оттуда одну директорию (около 500М), раньше я открывал архив через mc и копировал файл. Но mc сейчас завис и я вот думаю как реализовать, чтобы не распаковывать весь архив.

#241856

Могу сказать вот что: пробовал открыть большой архив в 4 Гб в File Roller из Scientific Linux 6.2. Всё тупило и подвисало, открыть архив так и не удалось. Попробовал сделать тоже самое с более новым File Roller из Linux Min 12 - архив открылся мгновенно. Попробуйте и вы.

#241858

Посмотреть содержимое архива (для перестраховки, чтобы уточнить путь к нужному каталогу)

text

tar tf ARCHIVE.tar.bz2

Извлечь нужный каталог DIR/CATALOG

text

tar xpvf ARCHIVE.tar.bz2 DIR/CATALOG

P.S. Это примерный алгоритм.

#241859

"riso" написал:
Сабж. Имеется бэкап хостинга, в 40 Гб, в архиве очень много мелких файлов (сайты же), Мне нужно вытянуть оттуда одну директорию (около 500М), раньше я открывал архив через mc и копировал файл. Но mc сейчас завис и я вот думаю как реализовать, чтобы не распаковывать весь архив.
никак. Если в середине, то пол-архива точно придётся распаковать. gnuzip это потоковый сжиматель, а tar это потоковый архиватор, и они не умеют, и не должны уметь произвольный доступ.
#241860

как-то так:
tar -tjf <ARCHIVE>.tar.bz2 | grep '^<dir>.*[^/]$' | xargs tar -xjf <ARCHIVE>.tar.bz2

не успел...

#241865
"Fat-Zer" написал:
tar -tjf <ARCHIVE> | grep '^<dir>' | xargs tar -xjf <ARCHIVE>

j тут лишняя, tar сам определит тип по расширению. У ТСа кстати gz, а не bz2.

#241870
"drBatty" написал:
j тут лишняя, tar сам определит тип по расширению.

уже добавил расширение... не знал, что тар оказывается такой умный...

"drBatty" написал:
У ТСа кстати gz, а не bz2.

чисто ради интереса... откуда такой телепатический вывод?

#241885

"Fat-Zer" написал:
чисто ради интереса... откуда такой телепатический вывод?
subject :p

"Fat-Zer" написал:
не знал, что тар оказывается такой умный...
всякие bzip2, grep, less, и прочие тоже наделены таким интеллектом. Хотя и не всегда, и не везде. На самом деле, в tar'е нет этих всех упаковщиков, как и в less, они в билиотеках. Это например позволяет читать маны без распаковки.
#241977

Попробовал сделать тоже самое с более новым File Roller из Linux Min 12 - архив открылся мгновенно.

спасибо, но нужен только консольных выход

tar -tf <ARCHIVE> | grep '^<dir>' | xargs tar -xjf <ARCHIVE>

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

tar xpvf ARCHIVE.tar.bz2 DIR/CATALOG

Lupo Alberto, к сожалению написал, что каталог не найден (я конечно подставил свои значения)

#241978
"riso" написал:
к сожалению написал, что каталог не найден (я конечно подставил свои значения)
"Lupo Alberto" написал:
Посмотреть содержимое архива (для перестраховки, чтобы уточнить путь к нужному каталогу)
text
tar tf ARCHIVE.tar.bz2

В выводе этой команды каталог был?
Просто моя «конструкция» принципиально ни чем не отличается от предложенной Fat-Zer.

#241979

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

#241981
"riso" написал:
этот вариант помог, но у меня вопрос, разве при такой схеме tar сначала не должен просмотреть каждую директорию, чтобы grep отработал, ему нужно отдать на вход весь вывод. Скорость была просто ужасна

я уже поправился, чтобы grep каталоги не выводил...

Lupo Alberto, в качестве аргумента tar'у нужен файл... целые каталоги он так не умеет извлекать...
а если и умеет, то нужен какой-то флаг в поисках которого нужно перерыть толстый ман.

#241982
"Fat-Zer" написал:
в качестве аргумента tar'у нужен файл... целые каталоги он так не умеет извлекать...
Показать
text
lupo@gentoo-laptop test % tar tf etc.tar.gz | grep gconf                                                [gentoo-laptop][13:06]
etc/env.d/50gconf
etc/gconf/
etc/gconf/gconf.xml.mandatory/
etc/gconf/gconf.xml.mandatory/.keep2
etc/gconf/gconf.xml.defaults/
etc/gconf/gconf.xml.defaults/.keep2
etc/gconf/gconf.xml.defaults/%gconf-tree-de.xml
etc/gconf/gconf.xml.defaults/%gconf-tree.xml
etc/gconf/gconf.xml.defaults/%gconf-tree-sv.xml
etc/gconf/gconf.xml.defaults/%gconf-tree-nl.xml
etc/gconf/2/
etc/gconf/2/path
etc/gconf/schemas/
etc/gconf/schemas/notification-daemon.schemas
lupo@gentoo-laptop test % tar xpvf etc.tar.gz etc/gconf                                                 [gentoo-laptop][13:06]
etc/gconf/
etc/gconf/gconf.xml.mandatory/
etc/gconf/gconf.xml.mandatory/.keep2
etc/gconf/gconf.xml.defaults/
etc/gconf/gconf.xml.defaults/.keep2
etc/gconf/gconf.xml.defaults/%gconf-tree-de.xml
etc/gconf/gconf.xml.defaults/%gconf-tree.xml
etc/gconf/gconf.xml.defaults/%gconf-tree-sv.xml
etc/gconf/gconf.xml.defaults/%gconf-tree-nl.xml
etc/gconf/2/
etc/gconf/2/path
etc/gconf/schemas/
etc/gconf/schemas/notification-daemon.schemas
lupo@gentoo-laptop test % ls -lR etc                                                                    [gentoo-laptop][13:06]
etc:
итого 4
drwxr-xr-x 6 lupo lupo 4096 Сен 16  2007 gconf/

etc/gconf: итого 16 drwxr-xr-x 2 lupo lupo 4096 Сен 16 2007 2/ drwxr-xr-x 2 lupo lupo 4096 Сен 16 2007 gconf.xml.defaults/ drwxr-xr-x 2 lupo lupo 4096 Сен 16 2007 gconf.xml.mandatory/ drwxr-xr-x 2 lupo lupo 4096 Сен 16 2007 schemas/

etc/gconf/2: итого 4 -rw-r--r-- 1 lupo lupo 1178 Сен 16 2007 path

etc/gconf/gconf.xml.defaults: итого 16 -rw-r--r-- 1 lupo lupo 817 Сен 16 2007 %gconf-tree-de.xml -rw-r--r-- 1 lupo lupo 583 Сен 16 2007 %gconf-tree-nl.xml -rw-r--r-- 1 lupo lupo 1074 Сен 16 2007 %gconf-tree-sv.xml -rw-r--r-- 1 lupo lupo 2046 Сен 16 2007 %gconf-tree.xml

etc/gconf/gconf.xml.mandatory: итого 0

etc/gconf/schemas: итого 4 -rw-r--r-- 1 lupo lupo 1683 Сен 16 2007 notification-daemon.schemas

#241985
"Fat-Zer" написал:
в качестве аргумента tar'у нужен файл... целые каталоги он так не умеет извлекать...

значит наврал...

Войдите или зарегистрируйтесь, чтобы ответить.