recursively descend sub-directories