Как мне получить следующий код для распознавания символической ссылки? - PullRequest
0 голосов
/ 23 февраля 2012
#!/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

1 Ответ

1 голос
/ 23 февраля 2012

Кажется, проблема в том, что вы печатаете то, что возвращает readlink, то есть имя цели. Кроме того, вы печатаете каждый файл в среднем цикле. Значение True для followLinks заставляет вас переходить в каталоги, которые являются символическими ссылками. Наконец, любые символические ссылки на каталоги хранятся в директориях, но не в файлах. Должно работать следующее:

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))
...