Самый эффективный способ объединить тысячи файлов в Perl - PullRequest
0 голосов
/ 09 декабря 2018

Я ищу наиболее эффективный способ объединения тысяч файлов.То, как я это делал (используя Perl) до сих пор: я открою исходный и целевой путь и вставлю каждую строку в конечный файл.Конечно, это займет много времени.Я подумал об использовании команды Linux cat для решения этой проблемы.Но из прошлых потоков я понял, что у cat есть MAX_ARG, который устанавливает ограничение для командной строки.Предположим, у вас есть массив @paths, который содержит все пути для объединения.Каков наиболее эффективный способ объединения тысяч файлов в один основной файл (порядок не имеет значения) с использованием Perl?

РЕДАКТИРОВАТЬ : Если это имеет значение, объединенный файл может получить до 3GB.

1 Ответ

0 голосов
/ 10 декабря 2018
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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...