Я использую tar
для архивирования группы очень больших (несколько ГБ) bz2
файлов.
Если я использую tar -tf file.tar
список файлов в архиве, это займет очень много времени (~ 10-15 минут).
Аналогично, cpio -t < file.cpio
для завершения требуется столько же времени, плюс или минус несколько секунд.
Соответственно, извлечение файла из архива ( tar -xf file.tar myFileOfInterest.bz2
например, через ) происходит так же медленно.
Существует ли какой-либо архивный метод, который хранит легкодоступный «каталог» с архивом, чтобы можно было быстро получить отдельный файл в архиве?
Например, какой-то каталог, в котором хранится указатель на определенный байт в архиве, а также размер файла, который нужно извлечь (а также любые другие специфические особенности файловой системы).
Существует ли инструмент (или аргумент для tar
или cpio
), который позволяет эффективный поиск файла в архиве?
Вы можете использовать SquashFS для таких архивов. это
Единственный известный мне недостаток - это то, что он доступен только для чтения.
http://squashfs.sourceforge.net/ http://www.tldp.org/HOWTO/SquashFS-HOWTO/whatis.html
источник
Хотя он не хранит индекс,
star
предполагается, что он быстрее, чемtar
. Кроме того, он поддерживает более длинные имена файлов и лучше поддерживает атрибуты файлов.Я уверен, что вы знаете, распаковка файла занимает много времени и, вероятно, будет фактором скорости извлечения, даже если бы был индекс.
Изменить: Вы также можете взглянуть на
xar
. Он имеет заголовок XML, который содержит информацию о файлах в архиве.С указанной страницы:
источник
star
не работает ......Торбьерн Равн Андерсер прав. GNU tar создает «поисковые» архивы по умолчанию. Но он не использует эту информацию при чтении этих архивов, если не указана опция -n. С опцией -n я просто извлек 7 ГБ файл из 300 ГБ архива за время, необходимое для чтения / записи 7 ГБ. Без -n это заняло больше часа и не дало результата.
Я не уверен, как сжатие влияет на это. Мой архив не был сжат.Сжатые архивы не являются "доступными для поиска", потому что текущая (1.26) tar-версия GNU разгружает сжатие во внешнюю программу.источник
Единственный известный мне формат архива, в котором хранится индекс, - это ZIP, потому что мне приходилось восстанавливать поврежденные индексы более одного раза.
источник
Он не индексирует, о котором я знаю, но я использую dump & restore с большими файлами, и навигация по дереву восстановления в интерактивном режиме для выбора случайных файлов ОЧЕНЬ быстра.
источник
Вы можете использовать 7z (7zip) формат архивирования / сжатия, если у вас есть доступ к
p7zip-full
пакету.В Ubuntu вы можете использовать эту команду для установки:
Для создания архива вы можете использовать,
7z a <archive_name> <file_or_directory>
и если вы не хотите сжимать файлы и хотите просто «хранить» их как есть, вы можете использовать-mx0
опцию, например:Затем вы можете извлечь файлы, используя
7z e
:Или вы можете перечислить индекс архива с помощью
7z l
которого удобно искать с помощьюgrep
:Это также
t
опция для проверки целостности,u
для добавления / обновления файла в архив иd
для удаления файла.ВАЖНО
ли не использовать формат 7zip для Linux файловой системы резервного копирования , как это не хранит владельца и группу файлов , содержащихся.
источник
Я верю, что GNU tar способен делать то, что вы хотите, но я не могу найти определенный ресурс, говорящий об этом.
В любом случае вам нужен формат архивации с индексом (так как это позволит вам делать то, что вы хотите). Я не верю, что ZIP-файлы могут расти такими большими, к сожалению.
источник