Arg list too long error? Here's a work-around.

Jeff Lampert lampert at millipore.com
Thu Nov 15 06:27:07 AEST 1990


I had an application run wild and create thousands of zero length files on
my Sequent UNIX box a few days ago.  All the files were in one sub-directory
and began with the characters SRW.  "No big deal", I thought.  "I'll just cd
to that directory and 'rm SRW*'"

Unfortunately, when I tried that, I got the error 'Arg list too long'.
When the shell tried to parse the asterisk, there were too many filenames
to fit in the argument list.  What was I to do?  The filenames were similar
to 'SRW634534872'.  I could issue the command 'rm SRW63453487*', then
'rm SRW63453486*', etc.  Or I could also write the directory list to a file,
then have a shell script delete the files from the directory list.  (Keep
in mind that 'ls SRW*' also produces the 'Arg list too long' error for the
same reason.)  Well, here's a neat work-around that I found.  Since I'm
new to UNIX, I don't know how well known this is, but I hope it helps
someone other than me...

The 'find' command does'nt seem to have the 'Arg list' limitation.  It also
has the feature of being able to execute a command on the files that it finds.
So, by giving the command:

find . -name "SRW*" -exec rm {} \;

I was able to delete all the SRW files.  By adding -print, you can see the
files being worked on:

find . -name "SRW*" -print -exec rm {} \;

Keep in mind that find works recursively, and that the above command will
remove all files "SRW*" in the sub-directories below the current one!!!
This may be what you want, or not.  Be careful.

One last example:
To change file protection on all files in a directory, and all files beneath
that directory,

cd /dirname
find . -name "*" -print -exec chmod 700 {} \;

Hope this helps.  Any better ways?  Please E-Mail me.  Any way to aviod
recursion?  Again, please let me know...

lampert at millipore.com



More information about the Comp.unix.misc mailing list