폴더가 실제로 다른 하드 링크로 연결되어 있는지 검색하려고합니다.이 경우 실제 경로를 찾습니다. 이 예에서폴더가 하드 링크이고 실제 경로를 얻는 지 확인하는 방법
#python 3.4
import os
dirList = [x[0] for x in os.walk('.')]
print (dirList)
for d in dirList:
print (os.path.realpath(d), os.path.islink(d))
"""
Given this directories structure:
<dir_path>\Example\
<dir_path>\Example\symLinks.py
<dir_path>\Example\hardLinkToF2 #hard link pointing to <dir_path>\Example\FOLDER1\FOLDER2
<dir_path>\Example\softLinkToF2 #soft link pointing to <dir_path>\Example\FOLDER1\FOLDER2
<dir_path>\Example\FOLDER1
<dir_path>\Example\FOLDER1\FOLDER2
The output from executing: C:\Python34\python <dir_path>\Example\symLinks.py is:
['.', '.\\FOLDER1', '.\\FOLDER1\\FOLDER2', '.\\hardLinkToF2']
<dir_path>\Example False
<dir_path>\Example\FOLDER1 False
<dir_path>\Example\FOLDER1\FOLDER2 False
<dir_path>\Example\hardLinkToF2 False
"""
항상 하드 또는 소프트 링크 모두 False를 반환 os.path.islink :
나는 다음과 같은 방법으로 (symLink.py)에서 파이썬으로 간단한 예제를했다. 한편, os.path.realpath는 하드 링크가 아닌 소프트 링크의 실제 경로를 반환합니다.Windows 8에서 python 3.4를 사용하여이 예제를 만들었습니다. 잘못된 것을하고 있거나 다른 방법이 있다면 실마리가 없습니다.
원본 파일과 같은 아이 노드에 대한 하드 링크가 가리키는하지만 원래의 파일을 참조하지 않습니다. 따라서 하드 링크가 주어지면 원본 파일을 확인할 수 있는지 확신 할 수 없습니다. 심볼릭 링크는 원래 파일을 이름으로 참조합니다. 따라서 심볼릭 링크가 주어지면 원래 파일로 이동할 수 있습니다 **. 그래서 당신이 묘사하는 행동은 그것이 어떻게 작동하는지 생각합니다. – RobertB
둘째, 문서에서'islink'는 "심볼릭 링크가 파이썬 런타임에서 지원되지 않으면 항상 거짓"을 반환한다고 말합니다. 아마도 이것은 여러분이보고있는 상징적 인 링크 행위와 관련이 있습니다. – RobertB
@RobertB와 동의 : 동일한 파일에 대한 두 개의 하드 링크는 구별 할 수 없으며, 링크를 사용하는 사람의 관점에서 실제로 "링크"되지 않습니다. 기본 파일이 N 개의 다른 장소에서 참조된다는 것만 알면됩니다. . 여러분이 할 수있는 최선의 방법은 동일한 파일 번호를 가진 모든 엔트리를 찾을 때까지 전체 파일 시스템을 스캔하는 것입니다. 그냥 분명히하기 위해 실제 심볼릭 링크 또는 NTFS 연결을 사용하고 있습니까? [교차점이 링크로 제대로 감지되지 않습니다.] (https://bugs.python.org/issue29250)와 같습니다. – ShadowRanger