我正在用来tar
存档一组非常大(多 GB)的bz2
文件。
如果我用tar -tf file.tar
它来列出档案中的文件,这需要很长时间才能完成(约 10-15 分钟)。
同样,cpio -t < file.cpio
完成所需的时间也一样长,加减几秒钟。
因此,从档案中检索文件(tar -xf file.tar myFileOfInterest.bz2
例如通过)的速度很慢。
是否有一种存档方法可以在档案中保留一个随时可用的“目录”,以便可以快速检索档案中的单个文件?
例如,某种目录存储了指向档案中特定字节的指针,以及要检索的文件的大小(以及任何其他文件系统特定的细节)。
是否存在一种工具(或参数tar
)cpio
可以有效地检索档案中的文件?
答案1
tar(以及 cpio、afio、pax 和类似程序)是面向流的格式 - 它们旨在直接传输到磁带或通过管道传输到另一个进程。虽然理论上可以在文件/流的末尾添加索引,但我不知道有哪个版本可以这样做(但这将是一个有用的增强功能)
它对您现有的 tar 或 cpio 档案没有帮助,但还有另一个工具 dar(“磁盘档案”),它可以创建包含此类索引的档案文件,并可以让您快速直接访问档案中的各个文件。
如果 dar 不包含在你的 unix/linux-dist 中,你可以在以下位置找到它:
答案2
您可以使用 SquashFS 来存储此类存档。
- 设计为使用保险丝驱动器进行访问(尽管存在传统接口)
- 压缩(块越大,效率越高)
- 包含在 Linux 内核中
- 存储 UID/GID 和创建时间
- 字节序感知,因此非常便携
我知道的唯一缺点是它是只读的。
http://squashfs.sourceforge.net/ http://www.tldp.org/HOWTO/SquashFS-HOWTO/whatis.html
答案3
答案4
托尔比约恩·拉文·安德瑟是正确的。GNU tar 默认创建“可搜索”档案。但如果未指定 -n 选项,则它在读取这些档案时不会使用该信息。使用 -n 选项时,我刚从 300GB 档案中提取了 7GB 文件,所需的时间足以读取/写入 7GB。如果没有 -n,则需要花费一个多小时,并且没有产生任何结果。
我不确定压缩会对此产生怎样的影响。我的存档没有被压缩。压缩存档不可“查找”,因为当前 (1.26) GNU tar 将压缩任务转移至外部程序。