是否有更智能的 tar 或 cpio 可以有效地检索存储在存档中的文件?

Ale*_*lds 27 linux archive tar cpio

我正在使用tar归档一组非常大(多 GB)的bz2文件。

如果我tar -tf file.tar用来列出存档中的文件,这需要很长时间才能完成(~10-15 分钟)。

同样,完成cpio -t < file.cpio所需的时间也一样长,加减几秒钟。

因此,从存档中检索文件(tar -xf file.tar myFileOfInterest.bz2例如通过)也很慢。

是否有一种存档方法可以在存档中保留一个随时可用的“目录”,以便可以快速检索存档中的单个文件?

例如,某种目录存储指向存档中特定字节的指针,以及要检索的文件的大小(以及任何其他文件系统特定的详细信息)。

是否有一个工具(或参数tarcpio)允许归档中的文件的高效检索?

cas*_*cas 18

tar(以及 cpio 和 afio 和 pax 以及类似的程序)是面向流的格式 - 它们旨在直接流式传输到磁带或通过管道传输到另一个进程。虽然理论上可以在文件/流的末尾添加索引,但我不知道有任何版本可以这样做(尽管这将是一个有用的增强)

它对您现有的 tar 或 cpio 存档没有帮助,但是还有另一个工具 dar(“磁盘存档”),它可以创建包含此类索引的存档文件,并且可以让您快速直接访问存档中的各个文件.

如果 dar 未包含在您的 unix/linux-dist 中,您可以在以下位置找到它:

http://dar.linux.free.fr/


Mau*_*nRa 11

您可以将 SquashFS 用于此类存档。这是

  • 设计为使用保险丝驱动程序访问(尽管存在传统接口)
  • 压缩(块大小越大,效率越高)
  • 包含在 Linux 内核中
  • 存储 UID/GID 和创建时间
  • 字节序感知,因此非常便携

我所知道的唯一缺点是它是只读的。

http://squashfs.sourceforge.net/ http://www.tldp.org/HOWTO/SquashFS-HOWTO/whatis.html


Den*_*son 8

虽然它不存储索引,但star据称比tar. 此外,它还支持更长的文件名并更好地支持文件属性。

我相信您知道,解压缩文件需要时间,并且即使有索引也可能是提取速度的一个因素。

编辑:您可能还想看看xar. 它有一个 XML 标头,其中包含有关存档中文件的信息。

从参考页面:

Xar 的 XML 标头允许它包含有关存档中包含的文件的任意元数据。除了标准的 unix 文件元数据(例如文件大小及其修改和创建时间)之外,xar 还可以存储诸如 ext2fs 和 hfs 文件位、unix 标志、对扩展属性的引用、Mac OS X Finder 信息、Mac OS 等信息X 资源分叉,以及文件数据的哈希值。


wom*_*ble 5

我所知道的唯一存储索引的存档格式是 ZIP,因为我不得不不止一次重建损坏的索引。


小智 5

Thorbjørn Ravn Anderser是对的。默认情况下,GNU tar 创建“可搜索”档案。但是如果没有给出 -n 选项,它在读取这些档案时不会使用该信息。使用 -n 选项,我刚刚从 300GB 存档中提取了 7GB 文件,以便读/写 7GB 所需的时间。没有 -n 花费了一个多小时并且没有产生任何结果。

我不确定压缩如何影响这一点。我的档案没有压缩。压缩档案不可“查找”,因为当前 (1.26) GNU tar 将压缩卸载到外部程序。

  • 如果我正确阅读了手册,它永远不会说它有任何类型的索引,并且可以根据文件名跳转到存档中的任何文件。--seek 只是意味着底层媒体是可搜索的,这样从头读取时,可以跳过读取文件内容,但仍需要从头读取条目头。也就是说,如果您有一个包含 1M 文件的存档,并且您尝试使用 --no-seek 提取最后一个文件,则需要读取所有文件的内容;使用 --seek,你只需要读取 1M 个头文件,每个文件一个,但它仍然非常慢。 (9认同)