我tar
用来归档一组非常大(多 GB)的bz2
文件。
如果我使用tar -tf file.tar
列出存档中的文件,这需要很长时间才能完成(约 10-15 分钟)。
同样,cpio -t < file.cpio
完成所需的时间也一样长,加上或减去几秒钟。
因此,从存档中检索文件(tar -xf file.tar myFileOfInterest.bz2
例如通过)同样慢。
是否有一种存档方法可以在存档中保留一个随时可用的“目录”,以便可以快速检索存档中的单个文件?
例如,某种目录存储指向存档中特定字节的指针,以及要检索的文件的大小(以及任何其他文件系统特定的细节)。
是否有工具(或 or 的参数tar
)cpio
可以有效地检索存档中的文件?
tar(以及 cpio 和 afio 以及 pax 和类似程序)是面向流的格式 - 它们旨在直接流式传输到磁带或通过管道传输到另一个进程。虽然从理论上讲,可以在文件/流的末尾添加一个索引,但我不知道有什么版本可以做到(虽然这将是一个有用的增强)
它对您现有的 tar 或 cpio 存档没有帮助,但是还有另一个工具 dar(“磁盘存档”),它确实可以创建包含此类索引的存档文件,并且可以让您快速直接访问存档中的各个文件.
如果 dar 不包含在您的 unix/linux-dist 中,您可以在以下位置找到它:
http://dar.linux.free.fr/
您可以将 SquashFS 用于此类存档。这是
我知道的唯一缺点是它是只读的。
http://squashfs.sourceforge.net/ http://www.tldp.org/HOWTO/SquashFS-HOWTO/whatis.html
虽然它不存储索引,但
star
据称比tar
. 此外,它支持更长的文件名,并且对文件属性有更好的支持。我相信您知道,解压缩文件需要时间,即使有索引,也可能是提取速度的一个因素。
编辑:您可能还想看看
xar
. 它有一个 XML 标头,其中包含有关存档中文件的信息。从参考页面:
我知道的唯一存储索引的存档格式是 ZIP,因为我不得不多次重建损坏的索引。
Thorbjørn Ravn Anderser是对的。GNU tar 默认创建“可搜索”档案。但是,如果未给出 -n 选项,它在读取这些档案时不会使用该信息。使用 -n 选项,我刚刚从 300GB 存档中提取了 7GB 文件,以读取/写入 7GB 所需的时间。没有 -n 它花了一个多小时并且没有产生任何结果。
我不确定压缩如何影响这一点。我的存档没有压缩。压缩档案不是“可搜索的”,因为当前 (1.26) GNU tar 将压缩卸载到外部程序。它没有我知道的索引,但我对大文件使用转储和还原,并且以交互模式导航还原树以选择随机文件非常快。
如果您有权访问该
p7zip-full
软件包,则可以使用 7z (7zip) 存档/压缩格式。在 Ubuntu 上,您可以使用以下命令安装它:
要创建您可以使用的存档,
7z a <archive_name> <file_or_directory>
并且如果您不想压缩文件并且只想按原样“存储”它们,您可以使用以下-mx0
选项:然后,您可以使用以下命令提取文件
7z e
:或者,您可以使用 列出存档的索引,以便使用
7z l
进行搜索grep
:这也是
t
测试完整性、u
向存档添加/更新文件以及d
删除文件的选项。重要提示
不要将7zip 格式用于 linux 文件系统备份,因为它不存储所包含文件的所有者和组。
我相信 GNU tar 能够做你想做的事,但我找不到这样说的权威资源。
在任何情况下,您都需要带有索引的存档格式(因为这将允许您做您想做的事)。不幸的是,我不相信 ZIP 文件会变得那么大。