| import fnmatch | |
| import os | |
| from typing import List, Union | |
| def match_files(path: str, | |
| pattern: Union[str, List], | |
| fuzzy: bool = False) -> List: | |
| if isinstance(pattern, str): | |
| pattern = [pattern] | |
| if fuzzy: | |
| pattern = [f'*{p}*' for p in pattern] | |
| files_list = [] | |
| for root, _, files in os.walk(path): | |
| for name in files: | |
| for p in pattern: | |
| if fnmatch.fnmatch(name.lower(), p.lower()): | |
| files_list.append([name[:-3], os.path.join(root, name)]) | |
| break | |
| return sorted(files_list, key=lambda x: x[0]) | |