如何获取以下代码以识别符号链接?

时间:2012-02-23 01:14:04

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

#!/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和files /Current/file.exe和一个符号链接/当前/链接,“islink”不识别“链接”符号链接,但认为它是一个目录并转到它链接到的实际文件。我的要求是在找到符号链接并打印时停止。我正在使用Python3.2

1 个答案:

答案 0 :(得分: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))