在Perl中串联数千个文件的最有效方法

时间:2018-12-09 11:36:16

标签: linux perl

我正在寻找连接数千个文件的最有效方法。到目前为止,我的使用方式(使用Perl)是:打开源和目标路径,并将每一行插入目标文件。 当然,这将花费很多时间。我考虑过使用Linux命令cat来解决此问题。但是从过去的线程中,我了解到cat具有MAX_ARG,它可以将限制设置为命令行。 假设您有一个数组@paths,其中包含所有要连接的路径。使用Perl将数千个文件连接成一个主文件(顺序无关紧要)的最有效方法是什么?

编辑:如果这很重要,则串联文件最多可以达到3GB

1 个答案:

答案 0 :(得分:0)

use IPC::Run qw( run );

run [ "xargs", "-0", "cat", "--" ],
   '<', \join("\0", @paths),
   '>', $output_qfn;

您也许可以使用find来生成要连接的文件列表。

use IPC::Run qw( run );

run [ "find", ..., "-print0" ],
   '|' [ "xargs", "-0", "cat", "--" ],
      '>', $output_qfn;

在GNU系统(例如Linux)上,使用xargs时可以避免使用find

use IPC::Run qw( run );

run [ "find", ..., "-exec", "cat", "--", "{}", "+" ],
   '>', $output_qfn;