On 2010-07-06 Adam Thompson wrote:
I can't find what I'm looking for in the bash(1) manpage, hoping there's an easy answer...
I want to use a construct like for i in ~/path/*; do something $i && rm $i; done
which works great as long as there are files in ~/path/. However, when the directory is empty, I get: rm: cannot remove `/home/athompso/path/*': No such file or directory
What you want is:
shopt -s failglob for i in /tmp/A/* /dev/null; do echo $i; done bash: no match: /tmp/A/* # gives an error but doesn't exec the do clause
or
shopt -s nullglob for i in /tmp/A/* ; do echo $i; done # outputs nothing, executes no do clause
Using these options lets you still do sane arg quoting in case there are spaces in filenames, etc.