parses only if files exist, respects directory structure