【问题标题】:fast concatenation of large number of files on linux在linux上快速连接大量文件
【发布时间】:2015-09-24 15:43:26
【问题描述】:

我正在寻找一种将单个目录中的大量文件(大约 50,000 个或更多文件)连接在一起的快速方法。每个文件大小在 1 到 5 Mb 之间。我知道使用 find 或 cat 命令只这样做一次不会那么耗时。但是我正在运行一个程序,它迭代地更新其中的一些文件,然后我必须重新连接所有文件以创建一个文件数据库。此外,有时程序会在目录中创建新文件,这可能会增加每次重复过程时要连接的文件总数。因为,我必须多次迭代地执行此步骤,连接的计算时间将随着文件数量和大小从几分钟到几小时的增加而逐渐增加。目前我正在使用 find 命令来执行此过程。但我想知道是否还有其他更好的方法来完成此过程,这可能需要更少的时间(几分钟)来连接所有文件。

谢谢

【问题讨论】:

  • 听起来您将文件系统用作数据库。重新设计您的工作流程,并使用数据库。
  • @William 所说的可能是正确的。也就是说,我想有一种方法可以在文件系统级别上做一些聪明的事情。最好使用一个只包含这些文件的专用分区,然后重新分配块,而不是毫无意义地移动 50 gig。也许有些文件系统的结构比其他文件系统更简单。
  • 为什么需要这么大的文件? ..您能否提供有关用例的更多详细信息
  • 哈,另一个想法是购买 50 GB 的 RAM 并在 RAM 中工作可能最便宜,只在后台同步。尽管 50 GB 可能不足以满足您的用例,并且在某些时候您会离开廉价用户硬件的领域。

标签: linux concatenation


【解决方案1】:

使用bashprocess substitution,您可以通过将连接直接输入到您正在运行的程序中来省去将连接写入磁盘文件的工作,同时并行化连接读取和分析过程,前提是仅按顺序读取连接。
而不是分析程序的文件名参数,您将编写 <(find … | xargs cat)(即您在进程替换构造中的 find 和 cat 命令)。

【讨论】:

    猜你喜欢
    • 2011-08-19
    • 2010-11-28
    • 2010-09-20
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多