The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Быстренько извлечь файл из tar.xz"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на рабочей станции (Консоль)
Изначальное сообщение [ Отслеживать ]

"Быстренько извлечь файл из tar.xz"  +/
Сообщение от Аноним (0), 08-Ноя-19, 07:17 
Как извлечь один файл из tar.xz — известно. Все мы это делаем в разные моменты своей жизни:

    tar xOf "архив.tar.xz" "точный/путь/к/файлу/внутри/архива"

Проблема лишь в том, что если архив достаточно большой, то tar будет продолжать сканировать архив, даже если файл был найден в самом его начале. У BSD-версии есть опция --fast-read, которая "stops after all non-wildcard extraction targets have been found in the archive"; с удивлением обнаружил, что у GNU-версии такой опции нет. Что, собственно, делать? Речь идет об архивах, у которых файл обнаруживается в течение пяти секунд чтения, но на сканирование оставшегося архива уходит 55 секунд.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Быстренько извлечь файл из tar.xz"  +1 +/
Сообщение от Licha Morada (ok), 08-Ноя-19, 07:57 
> Проблема лишь в том, что если архив достаточно большой, то tar будет
> продолжать сканировать архив, даже если файл был найден в самом его
> начале.

--occurrence[=N], вроде для этого, но там по дефолту уже 1.

Какой версии tar? Что-то подозрительно похожее в 1.17 починили, 12 лет назад.
https://www.gnu.org/software/tar/

> Что, собственно, делать? Речь идет
> об архивах, у которых файл обнаруживается в течение пяти секунд чтения,
> но на сканирование оставшегося архива уходит 55 секунд.

Если это массивно и критично, можно попытаться сколхозить что-то с --checkpoint и --checkpoint-action, типа периодически смотреть нашелся ли файл, и если да то убиться.
Хотя, может быть, починить исходники окажется проще. И стабильнее.
Или перепаковать всё в какой-нибудь другой формат.

Ещё рекомендую попробовать, есть ли разница в поведении несжатого архива, и сжатого разными способами. Вдруг это расжиматель архив не отпускает до конца, а не сам tar.


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Быстренько извлечь файл из tar.xz"  +/
Сообщение от Аноним (0), 08-Ноя-19, 08:29 
> Какой версии tar?

Да в принципе свежачок:

    tar (GNU tar) 1.32
    xz (XZ Utils) 5.2.4
    liblzma 5.2.4

> --occurrence[=N], вроде для этого, но там по дефолту уже 1.
> там по дефолту уже 1
> там по дефолту уже 1

Да. Верно. Так сказано в мане. А вот сейчас попробовал явно указать --occurrence=1, и он мгновенно вышел после извлечения нужного файла. А без опции продолжал сканировать. Странное дело, никому нельзя верить, даже официальным манам. Спасибо, мил-человек!

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Быстренько извлечь файл из tar.xz"  +/
Сообщение от Аноним (-), 08-Ноя-19, 10:19 
>> --occurrence[=N], вроде для этого, но там по дефолту уже 1.
>> там по дефолту уже 1
> Да. Верно. Так сказано в мане. А вот сейчас попробовал явно указать
> --occurrence=1, и он мгновенно вышел после извлечения нужного файла. А без
> опции продолжал сканировать. Странное дело, никому нельзя верить, даже официальным манам.
> Спасибо, мил-человек!

Мне кажется вы не правильно поняли. "The default N is 1." не означает, что эта опция применяется всегда при работе tar. Это означает, что если указать просто "--occurrence", то единицу можно не указывать. tar её сам подставит. Следовательно "The default N is 1." означает "--occurrence=1".

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Быстренько извлечь файл из tar.xz"  +/
Сообщение от Аноним (4), 08-Ноя-19, 11:07 
> Как извлечь один файл из tar.xz — известно. Все мы это делаем
> в разные моменты своей жизни:
>     tar xOf "архив.tar.xz" "точный/путь/к/файлу/внутри/архива"
> Проблема лишь в том, что если архив достаточно большой, то tar будет
> продолжать сканировать архив, даже если файл был найден в самом его
> начале. У BSD-версии есть опция --fast-read, которая "stops after all non-wildcard
> extraction targets have been found in the archive"; с удивлением обнаружил,
> что у GNU-версии такой опции нет. Что, собственно, делать? Речь идет
> об архивах, у которых файл обнаруживается в течение пяти секунд чтения,
> но на сканирование оставшегося архива уходит 55 секунд.

В общем случае вы ничего сделать не можете. Возвращать самый первый файл из архива можно, только если в нем не может быть его более современной версии, дописанной туда позднее (ключ -r).

Если вы часто нуждаетесь в извлечении отдельных файлов, я бы посоветовал вам не использовать сжатие. Оно является узким местом, особенно на виртуальных машинах, где процессорное время серьезно ограничено. Линейное чтение по нынешним временам достаточно быстрое, чтобы пробегать сотни гигабайт за разумное время.

Другим подходом может быть отдельная архивация директорий, из которых часто нужно что-то
вынимать. Делаете огромный архивный архив со всеми файлами для нужд полного восстановления, и маленький с теми, которые нужны чаще, чтобы не трогать для этого основной. Место на диске сейчас недорогое и эта избыточность не создаст большой проблемы.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Быстренько извлечь файл из tar.xz"  +/
Сообщение от Аноним (5), 09-Ноя-19, 21:14 
> был найден

Ещё можно прикрутить индекс и извлекать нужный файл без поиска. :)

Емнип работает как минимум с gz, наверно это никому не надо раз не взлетело. Но как вариант.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру