답변:
다른 옵션은 사용 readlink
가능한 경우 특별히 설계된 명령을 사용하는 것입니다 .
예 :
$ readlink -f `command -v php`
/usr/bin/php7.1
-f
GNU에 비 휴대용 확장입니다 readlink
.
Mac OS X 및 FreeBSD / NetBSD / etc에서. 그:
stat -f %Y <filename>
더 일반적으로 해결책은 다음과 같습니다 (stat --printf = % N은 이상한 따옴표를 사용합니다).
ls -l b | sed -e 's/.* -> //'
예:
# ln -s a b
# stat -f %Y b
a
다른 방법은 다음과 같습니다.
# find b -maxdepth 0 -printf %l
a#
마지막 줄은 줄 바꿈이 없기 때문에 엉망이지만 결과가 변수와 같이 필요하면 괜찮습니다.
# f=$(find b -maxdepth 0 -printf %l)
# echo $f
a
을 -maxdepth
방지하기 위해 필요한 find
경우 디렉토리로 내려에서 b
디렉토리로 발생합니다.
stat --printf='%N\n'
, 이상한 따옴표가 같은 따옴표 RM과 --interactive 사용 LN, 귀찮게하지 않는 내가 원하는 정확히입니다
link -> dest
. 이 ... GNU의 findutils의 또는 그렇지 있는지 찾기 (1) 솔루션은 확인해야합니다
echo $f
. 심볼릭 링크가 가리키는 경우 기대할 수있는 것은 아닙니다 /*
(그렇습니다 가능)
이식 가능 : 휴리스틱을 사용하여 ls -l 출력을 구문 분석하거나 사용하는 것 외에는 운이 없습니다. perl -le 'print readlink("some-file")'
일부 시스템에는 readlink
명령 이 있으며, 일부 시스템에는 -f
절대 경로를 얻을 수 있는 옵션이 있습니다.
/ 시스템 호출을 stat
위한 래퍼로서 다양한 명령 구현이 있습니다 . GNU는 그 점에서 유용하지 않지만 zsh의 내장 기능은 더 그렇습니다.stat
lstat
zmodload zsh/stat
stat +link the-link
여전히 zsh를 사용하면 :A
수정 자 (변수 확장, 히스토리 확장 및 글 로빙에 적용 )를 사용하여 파일의 절대 경로를 얻을 수 있습니다 (모든 symlink 구성 요소를 제거합니다) .
~$ gstat -c %N b
`b' -> `a'
~$ var=b
~$ echo $var:A
/home/me/a
~$ echo b(:A)
/home/me/a
~$ echo ?(@:A)
/home/me/a
내가 readlink
없거나 stat
명령이 있지만 Python 2.x 가있는 시스템에서는 짧은 스크립트를 사용하고 있습니다.
#!/usr/bin/env python
import os, sys
if __name__ == "__main__":
src = sys.argv[1]
target = os.readlink(src)
if not os.path.isabs(target):
target = os.path.abspath(os.path.join(os.path.dirname(src), target))
print target
readlink -f
이와 달리 한 수준의 심볼릭 링크 만 따를 수 있습니다.
realpath
coreutils
패키지 명령
readlink
명령 매뉴얼 페이지에 링크되어 있습니다.
예를 들면 다음과 같습니다.
realpath /bin/python
출력
/usr/bin/python2.7
내 컴퓨터에.
readlink -f
당신이 알고 싶다면 마지막 심볼릭 링크 대상 및뿐만 아니라 다음 일을.