recurse into directories