터미널에서 심볼릭 링크의 완전한 경로를 얻는 방법?


47

랩톱에 파이썬 설치가 엉망입니다. 나는 실행 파일을보고 /usr/local/bin있었고 그들은 모두 상징적 인 링크입니다.../../../Library......

이것을 둘러싼 이상한 행동이 있습니다. 내가 할 경우 ls -lhaG내가 볼 --->과 심볼릭 링크의 오른쪽에있는 상대 경로 :

lrwxr-xr-x  1 root  wheel    69B Dec  7 22:29 python3 -> ../../../Library/Frameworks/Python.framework/Versions/3.1/bin/python3

그러나 해당 경로를 확인하고 python3에 대한 실제 경로를 표시하는 명령 줄 도구를 얻을 수없는 것 같습니다. 나는 이것을 사용 pwd -P하는 find유틸리티 와 관련하여 여기저기서 약간의 혼란을 발견했다 . 문제는 사람들이 리눅스에서 일하는 사람들을 설명하는 방식으로 OS X에서 작동하지 않는 것입니다 (즉, 심볼릭 링크의 전체 경로 출력). 그들은 단지 나를 위해 심볼릭 링크 경로를 인쇄합니다.

FantasticMrFox:bin robert$ pwd -P python3
/usr/local/bin
FantasticMrFox:bin robert$ find `pwd -P` -name python3
/usr/local/bin/python3

여기서 무슨 일이 일어나고 있는지에 대한 아이디어가 있습니까?

답변:


36

나는 그렇게 생각 pwd -P하고 readlink이 작업에 대한 당신의 친구가 될 것입니다.

" Mac에서 GNU의 readlink -f 동작을 어떻게 얻을 수 있습니까? "는 유용한 자료입니다.

pwd -P symlink 디렉토리 안에있는 경우에만 작동합니다.

14:07:13 jason@mac ~ $ cd bin
14:08:08 jason@mac bin $ pwd -P
/Users/jason/Applications

readlink 대상을 지정하여 작동합니다 (따라서 파일에 사용할 수 있음).

14:09:03 jason@mac ~ $ readlink bin
Applications

14:09:34 jason@mac ~ $ readlink /var
private/var

의 출력은 지정된 대상 readlink부모 에 상대적인 것으로 보입니다 .

예 :의 부모 /var인은 /, 그래서 private/var를 기준으로, 정확 /. 위의 예에 bin -> Applications따라 둘 다 내 홈 디렉토리에 있습니다. 어디에서 실행하든 결과는 같습니다.


3
심볼릭 링크가 다른 심볼릭 링크를 가리키는 경우에는 readlink가 반복되지 않습니다. 나는 "완전히 해결"전화하지 것이다
제임스 로스

이것은와 같은 것으로 지정된 것들에 대한 심볼릭 링크에 대한 OP의 질문에는 작동하지 않는 것 같습니다 ../...
user124384

18

이것은 재귀 적으로 해결되며 절대 경로를 반환합니다.

$ python
>>> import os
>>> os.path.realpath("/usr/local/bin/python3")

또는 비대화 형 버전 :

python -c "import os; print(os.path.realpath('/usr/local/bin/python3'))"

1
내장이 실패하면 스크립팅에 의지하십시오. 확실히 작동합니다 : $ python -c "import os; print os.path.realpath('bin')">> /Users/jason/Applications. Mac과 * nix 시스템에서 .bash_profile / $ PATH를 통합하기 위해 ~ / bin을 ~ / Applications에 연결합니다.
Jason Salaz

1
이것은 훌륭하고 잘 작동합니다! 다른 * nix 시스템에서와 같이 쉘 에서이 작업을 수행 할 수있는 방법이 있는지 알고 싶지 않다는 것을 제외하고는 대답으로 표시합니다.
Robert S Ciaccio

1
다른 * nix 시스템에서 어떻게합니까? 또한 파이썬은 오늘날 리눅스 시스템에 거의 보편적으로 설치됩니다.
Jason Salaz

@vxjasonxv 내가 엉망으로 만들었을 때 찾은 것들은 질문에서 내가 말한 명령 pwdfind명령이 OS X 이외의 시스템에서 전체 경로를 해결 한다는 것을 암시했습니다. 나는 테스트하지 않았습니다.
Robert S Ciaccio


1

GNU coreutils-8.15는 2012 년에 realpath원하는 기능을 수행 하는 새로운 명령 줄 도구 를 추가했습니다 . 심볼릭 링크 체인을 확인하고 결과를 절대 (기본값) 또는 상대 경로로 출력합니다.

애플은 아직 realpathmacOS에 포함 되어 있지 않지만 슬프게도 모든 GPLv3 도구를 피하는 것처럼 보이지만 Homebrew를 사용하여 쉽게 설치할 수 있습니다 (예 : Homebrew :) brew install coreutils.


-2

을 사용할 수 있습니다 readlink -f. 모든 링크를 통해 반복됩니다. 링크가 추가 링크 인 경로에 있다고 가정하십시오. 최종 절대 경로를 원합니다.


응? 정확히 무슨 말을하는거야?
Rob

@DINESH SEHRA가 말하는 올바른 구문은 read link -f python3예를 들어 사용 하는 것이며 전체 심볼릭 링크를 버퍼링합니다.
Danijel-James W

3
-fOS X 버전의 readlink에는 존재 하지 않았으므로 OS X 사용자가 분명히 게시하지 않았습니다 .
sorin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.