This is another article in the category of dumping my internal wiki to this blog.
Looping over Files and Directories with failglob
Looping through files
#!/bin/bash for f in /path/to/files/*; do echo "Found file: $f" done
#!/bin/bash for d in */ ; do echo "$d" done
seems to be very easy.
Unfortunately, in the above code examples, if the paths are empty, the loop will execute exactly once, with f or d pointing to path/to/files/ or */ respectively. If this were to be followed by a rm, fun days would be ahead. Time to KKND!
Looking at the shopts man page offers the following two solutions.
shopt -s nullglob
nullgob allows filename patterns which match no files to expand to a null string, rather than themselves.
shopt -s failglob
With failglob, patterns which fail to match filenames during filename expansion result in an expansion error.
#!/bin/bash shopt -s nullglob for f in /path/to/files/*; do echo "Found file: $f" done