심볼릭 링크의 대상만 찾기

심볼릭 링크의 대상만 찾기

쉘 스크립트에서 사용할 심볼릭 링크의 대상을 가져오는 명령줄 방법을 찾고 있습니다. 지금까지 내가 본 가장 가까운 것은 을 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방지 해야 합니다.findb

답변3

find이는 GNU를 사용하여 수행할 수 있습니다: find src -prune -printf "%l\n".

답변4

readlink또는 명령이 없지만 statPython 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달리 한 수준의 기호 링크만 따를 수 있습니다.

관련 정보