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 find command. My script looks like this so far:
folders=`find -maxdepth 1 -type d`
for $i in $folders
do
echo $i
done
I would expect this to give output like:
./dir1 and foo
./dir2 and bar
./dir3 and baz
But I am insted getting output like this:
./dir1
and
foo
./dir2
and
bar
./dir3
and
baz
What am I doing wrong here?
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:Another safe and robust approach is to have
find
itself directly invoke your desired command:See the UsingFind wiki page for a complete treatment of the subject.
You can do something like this:
Since you aren't using any of the more advanced features of
find
, you can use a simple pattern to iterate over the subdirectories: