2012-02-23 2 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와 files/Current/file.exe 및 symlink/Current/link 폴더를 지정하면 "islink"는 "link"심볼릭 링크를 인식하지 못하고 디렉토리로 간주하고 계속 이동합니다 링크 된 실제 파일로 이동합니다. 내 요구 사항은 심볼릭 링크를 찾아서 인쇄 할 때 멈추는 것입니다. 나는 Python3.2를 사용하고있다어떻게 심볼릭 링크를 인식하는 다음 코드를 얻을 수 있습니까?

답변

1

문제는 당신이 대상의 이름 인 readlink가 반환하는 것을 인쇄하고있는 것으로 보인다. 또한 중간 루프의 모든 파일을 인쇄합니다. followLinks의 True 값으로 인해 심볼릭 링크 된 디렉토리로 재귀가 발생합니다. 마지막으로 디렉토리에 대한 모든 심볼릭 링크는 dir에 저장되지만 파일에는 저장되지 않습니다. 다음은 작동해야합니다 :

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

이것은 문제를 해결하지 못합니다. 문제는 코드 링크가 symlink 내부에 내용을 인쇄하고 symlink에서 멈추지 않는다는 것입니다. 심볼릭 링크를 "dir"또는 "subdir"로 간주하고 파일을 통해 재귀하는 것은 도움이되지 않습니다. symlink가 아닌 다른 모든 것을 제거하는 방법은 무엇입니까? – RashMans

+0

첫 번째 심볼릭 링크 이후에 코드를 중단 하시겠습니까? 파일이나 디렉토리에 심볼릭 링크가 있습니까? 어떤 OS를 사용하고 있습니까? – ABS

+0

첫 번째 심볼릭 링크 이후에 코드가 깨지지는 않지만 모든 심볼릭 링크를 인쇄하기를 원합니다. 예를 들어 현재 디렉토리가 있고/current 아래에 여러 개의 파일이 있고 현재/link1, link2 link3 아래에 여러 개의 심볼릭 링크가있는 경우 symlink가 아닌 코드를 무시하고 link1-> 실제 타겟, link2-> 실제 타겟 등을 인쇄합니다. – RashMans