【问题标题】:How do i get the following code to recognize a symlink?我如何获得以下代码来识别符号链接?
【发布时间】:2012-03-13 10:16:54
【问题描述】:
#!/usr/bin/env python3.2
import os
import sys


fileList = []
rootdir = sys.argv[1]
for subdir, dirs, files in os.walk(rootdir, followlinks=True):
    for file in files:
            f = os.path.join(subdir,file)
            if os.path.islink(file):
                countlink = countlink+1
                linkto = os.readlink(f)
                print(linkto)

如果我给这个代码一个文件夹说 /Current 和文件 /Current/file.exe 和一个符号链接 /Current/link,“islink”不识别“链接”符号链接,但认为它是一个目录并移动到它链接到的实际文件。我的要求是在找到符号链接时停止并打印它。我正在使用 Python3.2

【问题讨论】:

    标签: macos python-3.x symlink-traversal


    【解决方案1】:

    问题似乎是您正在打印 readlink 返回的目标名称。此外,您正在打印中间循环中的每个文件。 followLinks 的 True 值导致您递归到符号链接的目录。最后,任何指向目录的符号链接都存储在 dirs 中,而不是文件中。以下应该有效:

    for subdir, dirs, files in os.walk(rootdir, followlinks=False):
    for file in files+dirs:
            f = os.path.join(subdir,file)
            if os.path.islink(file):
                countlink = countlink+1
                linkto = os.readlink(f)
                print("{} -> {}".format(f,linkto))
    

    【讨论】:

    • 这并不能解决问题,问题是代码会在符号链接中打印内容并且不会在符号链接处停止。它认为符号链接是“目录”或“子目录”,并且通过文件递归没有帮助。我如何清除符号链接以外的所有内容?
    • 您希望代码在第一个符号链接后中断吗?符号链接是文件还是目录?您使用的是什么操作系统?
    • 我不希望代码在第一个符号链接后中断,但希望它打印所有符号链接。例如,如果我有一个当前目录,并且在 /current 下有多个文件,并且在 /Current 下有多个符号链接,比如链接 1、链接 2 链接 3,我希望代码忽略非符号链接,只打印链接 1-> 实际目标、链接 2-> 实际目标等
    • 查看上面的编辑答案。符号链接目录中的项目已打印,因为 followLinks 为 True 而符号链接不是,因为目录符号链接仅在 dirs 列表中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 2019-10-23
    相关资源
    最近更新 更多