我需要创建文件的压缩档案,并能够快速从中提取单个文件/目录。
问题是,例如,tar.bz2 似乎不是此类任务的最佳选择 - 在我的计算机上从 200Mb 存档(50000 个文件)中提取单个 4kb 文件需要 17 秒。
是否有某种存档格式可以从存档中快速导出单个文件(并且可以在 Linux 上运行)?
答案1
像素是 xz 的并行索引版本。
# Compress:
tar -I pixz -cf foo.tar.xz ./foo
# Decompress:
tar -I pixz -xf foo.tar.xz
# Very quickly list the contents of the compressed tarball:
pixz -l foo.tar.xz
# Very quickly extract a single file:
pixz -x dir/file < foo.tar.xz | tar x
答案2
Zip 格式单独压缩每个文件,然后将它们(与存档内容的目录)组合成一个存档文件。
答案3
除了已经提到的 zip 格式之外,dar
和dump
实用程序也擅长处理此问题,并且与 zip 不同的是,保留了 unix 权限。因为dar
您想避免使用固定存档选项,因为这又回到了一次压缩整个文件的 tar/gzip 方法,这提供了更好的压缩效果,但使得提取单个文件需要更长的时间,因为整个文件必须解压缩,直到找到所需的文件。 dump
可以很好地处理大量小文件(数万个),并且可以进行多线程压缩,但它只能读取 ext[234] 文件系统。
答案4
.tar.gz
具有更快的解压缩速度,但代价是最差的压缩大小。编辑:伊格纳西奥·巴斯克斯-艾布拉姆斯忍者了我。