James B. Byrne wrote:
On Mon, January 25, 2010 10:31, Robert Nichols wrote: \
Now if the "{}" string appears more than once then the command line contains that path more than once, but it is essentially impossible to exceed the kernel's MAX_ARG_PAGES this way.
The only issue with using "-exec command {} ;" for a huge number of files is one of performance. If there are 100,000 matched files, the command will be invoked 100,000 times.
-- Bob Nichols RNichols42@comcast.net
Since the OP reported that the command he used:
find -name "*.access*" -mtime +2 -exec rm {} ;
in fact failed, one may infer that more than performance is at issue.
The OP's problem lies not with the -exec construction but with the unstated, but nonetheless present, './' of his find invocation. Therefore he begins a recursive descent into that directory tree. Since the depth of that tree is not given us, nor its contents, we may only infer that there must be some number of files therein which are causing the MAXPAGES limit to be exceeded before the recursion returns.
Find just emits the filenames as encountered, so _no_ number of files should be able to cause an error. An infinitely deep directory tree might, or recursively linked directories, but only after a considerable amount of time and churning to exhaust the machine's real and virtual memory.
I deduce that he could provide the -prune option or the -maxdepth= 0 option to avoid this recursion instead. I have not tried either but I understand that one, or both, should work.
I'd say it is more likely that the command that resulted in an error wasn't exactly what was posted or there is a filesystem problem.