쉘 스크립트에서 사용할 심볼릭 링크의 대상을 가져오는 명령줄 방법을 찾고 있습니다. 지금까지 내가 본 가장 가까운 것은 을 stat -N src
출력한다는 것 입니다 src -> dst
. 물론 출력을 구문 분석하고 대상을 얻을 수 있지만 dst
대상을 얻을 수 있는 직접적인 방법이 있는지 알고 싶습니다.
답변1
readlink
또 다른 옵션은 가능한 경우 특별히 고안된 명령을 사용하는 것입니다 .
예를 들어
$ readlink -f `command -v php`
/usr/bin/php7.1
답변2
Mac OS X 및 FreeBSD/NetBSD/등에서. 그것은:
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
답변3
find
이는 GNU를 사용하여 수행할 수 있습니다: find src -prune -printf "%l\n"
.
답변4
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
달리 한 수준의 기호 링크만 따를 수 있습니다.