The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Быстренько извлечь файл из tar.xz, !*! Аноним, 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 секунд.

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

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

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

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

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

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


    • Быстренько извлечь файл из tar.xz, !*! Аноним, 08:29 , 08-Ноя-19 (2)
      > Какой версии tar?

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

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

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

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

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

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

  • Быстренько извлечь файл из tar.xz, !*! Аноним, 11:07 , 08-Ноя-19 (4)
    > Как извлечь один файл из 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).

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

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

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

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

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




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

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