我正在使用tar来归档一组非常大(多GB)的bz2文件。
如果我使用tar -tf file.tar列出档案中的文件,则需要很长时间才能完成( tar -tf file.tar分钟)。
同样, cpio -t < file.cpio只需要几秒钟的时间就可以完成。
因此,从存档中检索文件(例如,通过tar -xf file.tar myFileOfInterest.bz2 )速度很慢。
是否有档案的方法,使档案保留一个随时可用的“目录”,以便档案中的单个文件可以快速检索?
例如,某种types的目录存储指向档案中特定字节的指针,以及要检索的文件大小(以及任何其他特定于文件系统的特定信息)。
是否有一个工具(或tar或cpio参数),允许在档案中有效地检索文件?
tar(以及cpio,afio和pax以及类似的程序)都是面向stream的格式,它们可以直接stream式传输到磁带或者传输到另一个进程中。 而在理论上,它可以在文件/stream的末尾添加一个索引,我不知道任何版本(尽pipe这将是一个有用的增强)
它不会帮助您现有的tar或cpio存档,但是还有另外一个工具,dar(“磁盘存档”),可以创build包含这种索引的存档文件,并且可以让您快速直接访问存档中的单个文件。
如果dar不包含在你的unix / linux-dist中,你可以在:
你可以使用SquashFS这样的档案。 它是
我知道的唯一缺点是它是只读的。
http://squashfs.sourceforge.net/ http://www.tldp.org/HOWTO/SquashFS-HOWTO/whatis.html
虽然它不存储索引,但是star声称比tar更快。 另外,它支持更长的文件名,并更好地支持文件属性。
正如我确信你知道的那样,解压文件需要时间,并且可能是提取速度的一个因素,即使有索引。
编辑:你也可能想看看xar 。 它有一个XML标题,其中包含有关档案中文件的信息。
从参考页面:
Xar的XML头允许它包含档案中包含的文件的任意元数据。 除了标准的unix文件元数据,比如文件的大小以及修改和创build时间,xar可以存储诸如ext2fs和hfs文件位,unix标志,对扩展属性的引用,Mac OS X Finder信息,Mac OS X资源分支和文件数据的哈希值。
ThorbjørnRavn Anderser是正确的。 GNU tar在默认情况下创build“可search”档案。 但是,如果没有给出-n选项,它在读取这些档案时不会使用这些信息。 使用-n选项时,我只需从300GB的压缩文件中提取7GB文件,以及读取/写入7GB所需的时间。 没有 – 它花了超过一小时,没有产生任何结果。
我不确定压缩是如何影响的。 我的档案没有被压缩。 压缩归档不是“可search的”,因为当前(1.26)GNU tar将压缩转移到外部程序。
我所知道的唯一一个存储索引的存档格式是ZIP,因为我必须不止一次地重build损坏的索引。
它没有我知道的索引,但是我使用dump和restore来恢复大文件,在交互模式下导航恢复树来select随机文件的速度非常快。
如果您有权访问p7zip-full软件包,则可以使用7z(7zip)归档/压缩格式。
在Ubuntu上,你可以使用这个命令来安装它:
$ sudo apt-get install p7zip-full
要创build一个档案,你可以使用7z a <archive_name> <file_or_directory> ,如果你不想压缩这些文件,只想“保存”它们,你可以使用-mx0选项:
$ 7z a -mx0 myarchive.7z myfile.txt Creating archive myarchive.7z
然后您可以使用7z e提取文件:
$ 7z e myarchive.7z Processing archive: myarchive.7z Extracting myfile.txt
或者您可以用7z l列出归档的索引,这对于使用grep进行search很方便:
$ 7z l myarchive.7z | grep 2014-07-08 12:13:39 ....A 0 0 myfile.txt
这也是testing完整性的一个选项, u可以添加/更新一个文件到档案中,也可以删除一个文件。
重要的提示
不要将7zip格式用于linux文件系统备份,因为它不存储包含的文件的所有者和组。
我相信GNU焦油是能够做你想做的,但我找不到一个明确的资源这样说。
在任何情况下,你需要一个索引的归档格式(因为这将允许你做你想做的)。 我不相信ZIP文件不幸的会变大。