以下代码用于复制符号链接
if os.path.islink(src_path):
linkto = os.readlink(src_path)
os.symlink(linkto, dest_path)
但是,os.path.islink 和 os.readlink 不适用于连接点
如何识别交界点并在另一个地方重新创建它?
以下代码用于复制符号链接
if os.path.islink(src_path):
linkto = os.readlink(src_path)
os.symlink(linkto, dest_path)
但是,os.path.islink 和 os.readlink 不适用于连接点
如何识别交界点并在另一个地方重新创建它?
在 Python 3.5 中,
os.path.islink()
仅使用已记录的符号链接。自 Windows Vista 以来,模拟 Unix 符号链接的 NTFS 符号链接(到文件/文件夹)已可供用户应用程序使用。os.readlink()
os.symlink()
NTFS 联结是一个密切相关(目录链接)但自 Windows 2000 以来支持的不同概念(权限、远程路径),尽管联结的实际创建/删除需要在那里安装额外的实用程序,并且创建备份等标准实用程序可能会中断包含路口的文件夹。由于不同版本的 Windows 之间默认文件夹名称的更改以及使用连接点来保持向后兼容性,连接点现在非常普遍(在 cmd 中执行以查看示例)。
DIR /AL /S
从许多应用程序的角度来看,Junction 是一个常规文件夹。在备份上下文中,为避免多次循环或复制相同的文件,交接点的处理方式应与其他系统上的符号链接类似。
符号链接和连接点都实现为重新分析点,因此问题中的代码在指向目录时可以替换为(未测试):
支持连接点的功能的可能实现是:
在哪里:
create_junction()
这类似于mklink /Jis_reparse_point()
不仅可以返回True
Junction,还可以返回符号链接、挂载点(os.path.ismount()
) 和(可能)其他对象。形式上,符号链接等于
FILE_ATTRIBUTE_REPARSE_POINT
,连接点是不是挂载点WIN32_FIND_DATA.dwReserved0
IO_REPARSE_TAG_SYMLINK
IO_REPARSE_TAG_MOUNT_POINT
readlink()
返回 Junction 指向的文件夹的路径(os.readlink()
对于符号链接)。为简单起见,tcl 用于获取此路径,否则使用以下实现ctypes
:或者,根据具体情况,有不同程度的抛光和适用性的 PyPI 模块,例如
ntfsutils
,jaraco.windows
提供类似的功能。将来也可能直接支持os.path.islink()
os.readlink()
Directory Junction 。