From c59be8a134aa29cec8784c9716c987163724e85d Mon Sep 17 00:00:00 2001 From: Gerhard Gonter <ggonter@gmail.com> Date: Wed, 18 Jul 2018 14:34:58 +0200 Subject: [PATCH] only write 1000 filenames into the batch list so that xargs has a chance to write them into one command line --- textarchive/vlib001.pl | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/textarchive/vlib001.pl b/textarchive/vlib001.pl index 0df18ce..af826af 100755 --- a/textarchive/vlib001.pl +++ b/textarchive/vlib001.pl @@ -280,12 +280,34 @@ elsif ($op_mode eq 'policy') foreach my $d_repo (sort keys %$s) { my @s_paths= sort @{$s->{$d_repo}}; + my $part= 0; + my $fo_open= 0; + my $items= 0; - if (open (FO_COPY, '>:utf8', join ('_', '@copy', $s_repo, 'to', $d_repo))) + foreach my $p (@s_paths) { - foreach my $p (@s_paths) { print FO_COPY $p, "\0" } - close (FO_COPY); + unless ($fo_open) + { + my $fnm= join ('_', '@copy', $s_repo, 'to', $d_repo, 'part', ++$part); + unless (open (FO_COPY, '>:utf8', $fnm)) + { + printf STDERR "can't write to '$fnm'\n"; + exit; + } + print "writing items to '$fnm'\n"; + $fo_open= 1; + } + print FO_COPY $p, "\0"; + $items++; + if ($items >= 1000) # TODO: parametrize + { + close (FO_COPY); + $items= 0; + $fo_open= 0; + } } + + close (FO_COPY) if ($fo_open); } } } -- GitLab