fix #2235
This commit is contained in:
parent
abe7795105
commit
95b480af6d
@ -77,6 +77,22 @@ class DirectoryHelper:
|
|||||||
:param in_path: 源目录
|
:param in_path: 源目录
|
||||||
:param to_path: 目标目录
|
:param to_path: 目标目录
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def __comman_parts(path1: Path, path2: Path) -> int:
|
||||||
|
"""
|
||||||
|
计算两个路径的公共路径长度
|
||||||
|
"""
|
||||||
|
parts1 = path1.parts
|
||||||
|
parts2 = path2.parts
|
||||||
|
root_flag = parts1[0] == '/' and parts2[0] == '/'
|
||||||
|
length = min(len(parts1), len(parts2))
|
||||||
|
for i in range(length):
|
||||||
|
if parts1[i] == '/' and parts2[i] == '/':
|
||||||
|
continue
|
||||||
|
if parts1[i] != parts2[i]:
|
||||||
|
return i - 1 if root_flag else i
|
||||||
|
return length - 1 if root_flag else length
|
||||||
|
|
||||||
# 处理类型
|
# 处理类型
|
||||||
if media:
|
if media:
|
||||||
media_type = media.type.value
|
media_type = media.type.value
|
||||||
@ -121,21 +137,19 @@ class DirectoryHelper:
|
|||||||
if in_path and settings.TRANSFER_SAME_DISK:
|
if in_path and settings.TRANSFER_SAME_DISK:
|
||||||
# 优先同根路径
|
# 优先同根路径
|
||||||
max_length = 0
|
max_length = 0
|
||||||
target_dir = None
|
target_dirs = []
|
||||||
for matched_dir in matched_dirs:
|
for matched_dir in matched_dirs:
|
||||||
try:
|
try:
|
||||||
# 计算in_path和path的公共字符串长度
|
# 计算in_path和path的公共路径长度
|
||||||
matched_path_str = str(Path(matched_dir.path))
|
relative_len = __comman_parts(in_path, Path(matched_dir.path))
|
||||||
relative_len = len(StringUtils.find_common_prefix(str(in_path), matched_path_str))
|
if relative_len and relative_len >= max_length:
|
||||||
if relative_len > max_length:
|
|
||||||
# 更新最大长度
|
|
||||||
max_length = relative_len
|
max_length = relative_len
|
||||||
target_dir = matched_dir
|
target_dirs.append(matched_dir)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.debug(f"计算目标路径时出错:{str(e)}")
|
logger.debug(f"计算目标路径时出错:{str(e)}")
|
||||||
continue
|
continue
|
||||||
if target_dir:
|
if target_dirs:
|
||||||
return target_dir
|
matched_dirs = target_dirs
|
||||||
|
|
||||||
# 优先同盘
|
# 优先同盘
|
||||||
for matched_dir in matched_dirs:
|
for matched_dir in matched_dirs:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user