2012-02-23 74 views
0
#!/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/file.exe和符號鏈接/當前/鏈接,「islink」不承認「鏈接」符號鏈接,但認爲它是一個目錄,並繼續前進到它鏈接到的實際文件。我的要求是在發現符號鏈接並打印時停止。我正在使用Python3.2我如何獲得以下代碼來識別符號鏈接?

回答

1

這個問題似乎是,你打印什麼readlink返回哪個是目標的名稱。此外,您正在中間循環中打印每個文件。 followLinks的True值會導致您遞歸到符號鏈接的目錄中。最後,目錄的任何符號鏈接都存儲在目錄中,但不存儲在文件中。以下應該工作:

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)) 
+0

這沒有解決問題,問題是代碼打印符號鏈接內的東西,並不停止在符號鏈接。它認爲符號鏈接是一個「目錄」或「子目錄」,並通過文件遞歸不幫助。我如何除掉符號鏈接以外的其他東西? – RashMans 2012-02-23 01:42:09

+0

你想在第一個符號鏈接之後破解代碼嗎?是文件或目錄的符號鏈接?你在使用什麼操作系統? – ABS 2012-02-23 01:50:23

+0

我不想讓代碼在第一個符號鏈接後斷開,但希望它打印所有的符號鏈接。例如,如果我有一個目錄目前和有多個文件在/當前和多個符號鏈接下/當前說link1,link2 link3我希望代碼忽略非符號鏈接,只需打印link1->實際目標,link2->實際目標等 – RashMans 2012-02-23 01:56:35