使用Python,我需要检查数百个符号链接是否正确,否则重新创建它们。我现在所做的是比较我想要的东西和我拥有的东西,但它很慢,因为它是通过NFS自动挂载的。
否则我将使用命令'ls -l'运行子进程并处理返回的字符串列表。我更喜欢使用Python库的更好的解决方案...
编辑1:我有:link_name -> link_target
,然后是link_target -> a_real_file
。我需要的是从link_target
中提取link_name
,而不是a_real_file
。我不在乎真实文件是否存在。
编辑2:也许我没有正确表达。正确的符号链接的意思是'一个指向预定义路径的链接,即使它不存在'。所以我需要检查一下:
link_name_1 -> target_1
link_name_2 -> target_2
这就是为什么我需要提取目标,而不是真正的路径。然后我将它们与参考(字典)进行比较。所以我的问题是:如何提取目标路径?
答案 0 :(得分:10)
您需要查看os.readlink()
。
答案 1 :(得分:2)
在Python 3.9或更高版本中,可以使用pathlib.Path.readlink()
。
>>> p = Path('mylink')
>>> p.symlink_to('setup.py')
>>> p.readlink()
PosixPath('setup.py')
答案 2 :(得分:0)
答案 3 :(得分:0)
要确定链接是否已损坏,您可以os.walk
和测试os.path.exists(path)
,对于损坏的链接,它将返回False。然后,您可以使用os.path.realpath(path)
找出链接应该指向的内容
像(未经测试)的东西:
for root, dirs, files in os.walk('<path>'):
for file in files:
f = os.join(root, file)
if os.path.islink(f) and not os.path.exist(f):
print("Broken: {} -> {}".format(f, os.path.realpath(f)))