I have a bash script in which I need to iterate over each line of the ouput of the find command, but it appears that I am iterating over each Word (space delimited) from the
You can do something like this:
find -maxdepth 1 -type d | while read -r i
do
echo "$i"
done
folders=`foo`
is always wrong, because it assumes that your directories won't contain spaces, newlines (yes, they're valid!), glob characters, etc. One robust approach (which requires the GNU extension -print0
) follows:
while IFS='' read -r -d '' filename; do
: # something with "$filename"
done < <(find . -maxdepth 1 -type d -print0)
Another safe and robust approach is to have find
itself directly invoke your desired command:
find . -maxdepth 1 -type d -exec printf '%s\n' '{}' +
See the UsingFind wiki page for a complete treatment of the subject.
Since you aren't using any of the more advanced features of find
, you can use a simple pattern to iterate over the subdirectories:
for i in ./*/; do
echo "$i"
done