I have recently been copying and moving a large number of files (~400,000). I know that there are limitations on the number of arguments that can be expanded on the Bash command line, so I have been using xargs to limit the numbers produced.
Out of curiosity, I wondered what the maximum number of arguments that I could use was, and I found this post saying that it was system-dependant, and that I could run this command to find out:
$ getconf ARG_MAX
To my surprise, the anwser I got back was:
2621440
Just over 2.6 million. As I said, the number of files that I am manipulating is much less than this -- around 400k. I definitely need to use the xargs
method of moving and copying these files, because I tried using a normal mv * ...
or cp * ...
and got a 'Argument list too long' error.
So, do the mv
and cp
commands have their own fixed limit on the number of arguments that I can use (I couldn't find anything in their man pages), or am I missing something?
ARG_MAX
is the maximum length of the arguments to theexec(3)
functions. A shell is not required to support passing this length of arguments from its command line.As Ignacio said,
ARG_MAX
is the maximum length of the buffer of arguments passed toexec()
, not the maximum number of files (this page has a very in-depth explanation). Specifically, it listsfs/exec.c
as checking the following condition:And, it seems, you have some additional limitations: