Python3.10+ macOS下创建指向符号链接的符号链接方法
实现A -> B -> C的符号链接结构并获取中间链接B
1. 创建A->B->C的链接结构
使用pathlib.Path.symlink_to()可以正常创建多层符号链接,代码示例如下:
from pathlib import Path # 1. 创建实际文件C c_file = Path("C.txt") c_file.write_text("测试内容") # 2. 创建符号链接B,指向C link_b = Path("B") # 若使用相对路径,目标路径是相对于B所在目录的路径 link_b.symlink_to(c_file) # 3. 创建符号链接A,指向B link_a = Path("A") link_a.symlink_to(link_b)
执行后,通过终端命令可验证链接结构:
ls -l # 输出示例: # lrwxr-xr-x 1 username staff 1 8 10 11:20 A -> B # lrwxr-xr-x 1 username staff 5 8 10 11:20 B -> C.txt # -rw-r--r-- 1 username staff 6 8 10 11:20 C.txt
2. 为什么A.resolve()返回C?
Path.resolve()方法默认会递归解析所有层级的符号链接,直到找到实际的文件或目录,因此调用link_a.resolve()会直接返回最终文件C的路径,这是该方法的默认行为。
3. 获取A直接指向的B
要获取A的直接链接目标B而非最终文件C,使用Path.readlink()方法即可——它会直接读取符号链接的指向路径,不会递归解析:
# 获取A的直接目标路径 direct_target = link_a.readlink() print(direct_target) # 输出: B(同目录下的相对路径) # 验证该目标是否为符号链接 print(Path(direct_target).is_symlink()) # 输出: True
注意事项
- 创建符号链接时,若使用相对路径,目标路径是相对于符号链接所在目录的路径;若使用绝对路径,则无需担心相对路径的问题。
readlink()在macOS和Linux下行为一致,均返回直接链接目标。
内容的提问来源于stack exchange,提问作者Teddy C
相关产品推荐
相关产品推荐

