Date: Fri, 8 Mar 2013 13:05:41 -0700 (MST) From: Warren Block <wblock@wonkity.com> To: Brooks Davis <brooks@freebsd.org> Cc: freebsd-fs@freebsd.org Subject: Re: Argument list too long Message-ID: <alpine.BSF.2.00.1303081239450.89649@wonkity.com> In-Reply-To: <20130308190917.GA34838@lor.one-eyed-alien.net> References: <82112.1362671436.13776555968178880512@ffe17.ukr.net> <20130307161546.GV47829@e-new.0x20.net> <20130308190917.GA34838@lor.one-eyed-alien.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 8 Mar 2013, Brooks Davis wrote: > On Thu, Mar 07, 2013 at 05:15:46PM +0100, Lars Engels wrote: >> On Thu, Mar 07, 2013 at 05:50:36PM +0200, Vladislav Prodan wrote: >>> Why 12K small files from one directory to cause problems? >>> >>> # ll | wc -l >>> 11467 >>> >>> # grep X-PHP-Script * | more >>> /sbin/grep: Argument list too long. >>> >>> # egrep X-PHP-Script *.ua | more >>> /usr/sbin/egrep: Argument list too long. >>> >>> # cat *.ua | grep X-PHP-Script | more >>> /sbin/cat: Argument list too long. >>> >>> >>> >> >> Your shell can't process that many arguments. Use this: >> >> grep -R "X-PHP-Script" . >> >> or if you don't want to descent into subdirectories: >> >> find . -type -f -name '*.ua' -maxdepth 1 -exec grep "X-PHP-Script" {} \+ There is a typo, should be "-type f". > This won't include file names and is gratuitously inefficient starting one > grep per file. But the final \+ means "{} is replaced with as many pathnames as possible for each invocation of utility. This behaviour is similar to that of xargs(1)." > The command you're looking for is: > > find . -type -f -name '*.ua' -maxdepth 1 -print0 | xargs -0 grep -H "X-PHP-Script" > > The find -print0 | xargs -0 allows filenames to contain spaces. The > grep -H is mostly theoretical in that the last grep invocation by xargs > couple only include one file and thus wouldn't include the filename. For fun, after running each of these several times to preload cache: find /usr/ports -type f -print0 | xargs -0 grep -H "X-PHP-Script" 40.98 seconds (average) find /usr/ports -type f -exec grep -H "X-PHP-Script" {} \+ 42.27 seconds (average) So they aren't too different in performance.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.BSF.2.00.1303081239450.89649>