我正在寻找连接数千个文件的最有效方法。到目前为止,我的做法(使用Perl(是:打开源路径和目标路径,并将每一行插入到目标文件。当然,这需要很多时间。我想使用Linux命令cat
来解决这个问题。但从过去的线程中,我了解到cat有MAX_ARG
,它设置了对命令行的限制。假设您有一个数组@paths
,它包含要连接的所有路径。使用Perl将数千个文件连接到一个主文件中(顺序无关紧要(,最有效的方法是什么?
EDIT:如果这很重要,连接文件可能会达到3GB
。
use IPC::Run qw( run );
run [ "xargs", "-0", "cat", "--" ],
'<', join(" ", @paths),
'>', $output_qfn;
您可以使用find
生成要连接的文件列表。
use IPC::Run qw( run );
run [ "find", ..., "-print0" ],
'|' [ "xargs", "-0", "cat", "--" ],
'>', $output_qfn;
在GNU系统(例如Linux(上,使用find
时可以避免使用xargs
。
use IPC::Run qw( run );
run [ "find", ..., "-exec", "cat", "--", "{}", "+" ],
'>', $output_qfn;