From 09310675fcdd07b35b4ae93746aa44736b4b1dc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=B5=E6=9B=A6?= Date: Wed, 17 Jul 2024 09:57:24 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20#119=20=E9=9F=B3=E4=B9=90=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E6=94=AF=E6=8C=81=E8=BD=AF=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xiaomusic/utils.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/xiaomusic/utils.py b/xiaomusic/utils.py index 21adf9b..5e227fb 100644 --- a/xiaomusic/utils.py +++ b/xiaomusic/utils.py @@ -136,11 +136,23 @@ def _append_files_result(result, root, joinpath, files, support_extension): result[dir_name].append(os.path.join(joinpath, file)) +def custom_walk(top, followlinks=True): + for root, dirs, files in os.walk(top, followlinks=False): + yield root, dirs, files + + for dir in dirs: + path = os.path.join(root, dir) + if followlinks and os.path.islink(path): + # 如果启用 followlinks 并且是符号链接,获取其实际路径 + real_path = os.readlink(path) + yield from custom_walk(real_path, followlinks=followlinks) + + def traverse_music_directory( directory, depth=10, exclude_dirs=None, support_extension=None ): result = {} - for root, dirs, files in os.walk(directory): + for root, dirs, files in custom_walk(directory): # 忽略排除的目录 dirs[:] = [d for d in dirs if d not in exclude_dirs]