recursive directory scanner