How can I delete these files w/o removing the folder itself?
ls -1 .thumbnails/large/* | while read f; do rm $f; done
This won't work. The problem is the * which the shell expands BEFORE the command is called. There is a limit on the number of characters that can be passed to execv(2). That is xargs(1) purpose: to do the minimum number of forks while staying within execv(2) limits.
Is this an exercise? What's wrong with "rm -rf .thumbnails/large" followed by "mkdir .thumbnails/large"?
What's wrong with it is that is may not regenerate the directory with the same ownership or permissions. The original owner also didn't say whether they wanted the files beginning with a period deleted or the files deleted recursively. The original poster said "rm .thumbnails/large/*" and just to be perverse, I'm going to take him at his literal word. So in that case, no period files and no recursion. Here is the incantation: (cd .thumbnails/large; find . -maxdepth 1 -type f ! -regex '^\./\..*' -print0 | xargs --null rm -f) The reason that the () are used is that it is executed in a subshell (the Bash shell forks itself, runs the commands, then exits) and running in a subshell leaves you in the same directory as you started. The reason that "-maxdepth 1 is used is to stop recursion. "-type f" prevents looking at directories. "! -regex '^\./\..*'" says to not match files that begin with "./." (i.e., dot files). The reason that "-print0" and "--null" are used is to allow file names with spaces in them to be deleted. The reason that "-f" is passed to "rm" is so files without the write bit on are also removed (assuming you have permission). I often using xargs with etags. Witness, rm TAGS; find . -name '*.[hc]' -print0 | xargs --null etags -a for Emacs tags. -- To unsubscribe, e-mail: opensuse+unsubscribe@opensuse.org For additional commands, e-mail: opensuse+help@opensuse.org