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