AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 59795
Accepted
Alex Reynolds
Alex Reynolds
Asked: 2009-08-28 15:26:29 +0800 CST2009-08-28 15:26:29 +0800 CST 2009-08-28 15:26:29 +0800 CST

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

  • 772

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

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

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

因此,从存档中检索文件(tar -xf file.tar myFileOfInterest.bz2例如通过)同样慢。

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

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

是否有工具(或 or 的参数tar)cpio可以有效地检索存档中的文件?

linux
  • 8 8 个回答
  • 16480 Views

8 个回答

  • Voted
  1. Best Answer
    cas
    2009-08-28T17:07:12+08:002009-08-28T17:07:12+08:00

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

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

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

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

    • 20
  2. MauganRa
    2013-12-31T09:31:46+08:002013-12-31T09:31:46+08:00

    您可以将 SquashFS 用于此类存档。这是

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

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

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

    • 12
  3. Dennis Williamson
    2009-08-28T17:04:17+08:002009-08-28T17:04:17+08:00

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

    我相信您知道,解压缩文件需要时间,即使有索引,也可能是提取速度的一个因素。

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

    从参考页面:

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

    • 8
  4. womble
    2009-08-28T16:53:20+08:002009-08-28T16:53:20+08:00

    我知道的唯一存储索引的存档格式是 ZIP,因为我不得不多次重建损坏的索引。

    • 6
  5. Aidas Kasparas
    2013-10-18T04:56:22+08:002013-10-18T04:56:22+08:00

    Thorbjørn Ravn Anderser是对的。GNU tar 默认创建“可搜索”档案。但是,如果未给出 -n 选项,它在读取这些档案时不会使用该信息。使用 -n 选项,我刚刚从 300GB 存档中提取了 7GB 文件,以读取/写入 7GB 所需的时间。没有 -n 它花了一个多小时并且没有产生任何结果。

    我不确定压缩如何影响这一点。我的存档没有压缩。压缩档案不是“可搜索的”,因为当前 (1.26) GNU tar 将压缩卸载到外部程序。

    • 5
  6. MediaManNJ
    2009-08-28T18:44:41+08:002009-08-28T18:44:41+08:00

    它没有我知道的索引,但我对大文件使用转储和还原,并且以交互模式导航还原树以选择随机文件非常快。

    • 2
  7. complistic
    2014-07-08T18:50:43+08:002014-07-08T18:50:43+08:00

    如果您有权访问该p7zip-full软件包,则可以使用 7z (7zip) 存档/压缩格式。

    在 Ubuntu 上,您可以使用以下命令安装它:

    $ sudo apt-get install p7zip-full
    

    要创建您可以使用的存档,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:

    $ 7z l myarchive.7z | grep
    
    2014-07-08 12:13:39 ....A            0            0  myfile.txt
    

    这也是t测试完整性、u向存档添加/更新文件以及d删除文件的选项。

    重要提示
    不要将7zip 格式用于 linux 文件系统备份,因为它不存储所包含文件的所有者和组。

    • 2
  8. Thorbjørn Ravn Andersen
    2009-08-29T10:11:38+08:002009-08-29T10:11:38+08:00

    我相信 GNU tar 能够做你想做的事,但我找不到这样说的权威资源。

    在任何情况下,您都需要带有索引的存档格式(因为这将允许您做您想做的事)。不幸的是,我不相信 ZIP 文件会变得那么大。

    • 1

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve