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

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

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

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

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

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

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

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

是否存在一种工具(或参数tarcpio可以有效地检索档案中的文件?

答案1

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

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

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

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

答案2

您可以使用 SquashFS 来存储此类存档。

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

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

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

答案3

虽然它不存储索引,star据称比 更快tar。此外,它支持更长的文件名,并且对文件属性有更好的支持。

我相信您已经意识到,解压缩文件需要时间,即使有索引,这也可能会影响提取速度。

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

从参考页面:

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

答案4

托尔比约恩·拉文·安德瑟是正确的。GNU tar 默认创建“可搜索”档案。但如果未指定 -n 选项,则它在读取这些档案时不会使用该信息。使用 -n 选项时,我刚从 300GB 档案中提取了 7GB 文件,所需的时间足以读取/写入 7GB。如果没有 -n,则需要花费一个多小时,并且没有产生任何结果。

我不确定压缩会对此产生怎样的影响。我的存档没有被压缩。压缩存档不可“查找”,因为当前 (1.26) GNU tar 将压缩任务转移至外部程序。

相关内容