2023-08-25 17:36:30 +08:00
|
|
|
import fnmatch
|
|
|
|
import os
|
2024-04-26 23:07:34 +08:00
|
|
|
from typing import List, Tuple, Union
|
2023-08-25 17:36:30 +08:00
|
|
|
|
|
|
|
|
|
|
|
def match_files(path: str,
|
|
|
|
pattern: Union[str, List],
|
2024-04-26 23:07:34 +08:00
|
|
|
fuzzy: bool = False) -> List[Tuple[str, str]]:
|
2023-08-25 17:36:30 +08:00
|
|
|
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()):
|
2024-04-26 23:07:34 +08:00
|
|
|
files_list.append((name[:-3], os.path.join(root, name)))
|
2023-08-25 17:36:30 +08:00
|
|
|
break
|
|
|
|
|
|
|
|
return sorted(files_list, key=lambda x: x[0])
|