How can I delete all files from a directory when it reports "Argument list too long"
In the event you cannot remove the directory, you can always use find.
find . -maxdepth 1 -type f -exec rm -f {} \;
That will delete all files in the current directory, and only the current directory (not subdirectories).
find . -maxdepth 1 -type f -exec rm -f {} \;
it simply takes too long (one exec of rm per file).
this one is much more efficient:
find . -maxdepth 1 -type f -print0 | xargs -r0 rm -f
as it takes as much filenames as argument to rm as much it's possible, then runs rm with the next load of filenames... it may happen that rm is only called 2 or 3 times.
Both these will get round the problem. There is an analysis of the respective performance of each technique over here.
find . -name WHATEVER -exec rm -rf {} \;
or
ls WHATEVER | xargs rm -rf
The problem stems from bash expanding "*" with everysingle item in the directory. Both these solutions work through each file in turn instead.
I was able to do this by backing up one level:
cd ..
And running:
rm directory name -rf
And then re-creating the directory.