링크 대상의 전체 경로를 얻는 방법


13

나는 심볼릭 링크가있는 경우 /var/opt/foo로 생성을 ln -fs /path/to/target/dir foo. 링크 만 보는 스크립트에서 어떻게 할 수 /path/to/target/dir있습니까?

내가 스크립트에서 달성하고자하는 것은 내가 rm -rf /path/to/target/dir하기 전에 ln -fs /path/to/another/dir foo입니다.

답변:


30
link=/var/opt/foo

target=$(readlink "$link")

$target 파일 시스템에 저장된 그대로 링크의 대상이되었습니다.

그러나 심볼릭 링크는 상대적 일 수 있으므로 일반적인 사용법에 더 좋습니다.

target=$(readlink -f "$link")

이것은 readlinkBSD 및 다른 시스템에는 없을 수있는 GNU Coreutils에서 사용 합니다.

편집 : readlink -f 링크 대상이 존재하는 한 BSD에서 작동합니다. realpath비슷한 방식으로 작동하는 또 다른 BSD 전용 도구입니다.


1
BSD는 readlink()4.2BSD 시절부터 시스템 호출 을 해왔습니다 . 현재 BSD의 readlink 유틸리티 는 FreeBSD 4.10과 함께 릴리스되었습니다. stat명령에 대한 하드 링크로 다시 구현되었습니다 ( MacOS X 매뉴얼 페이지 FreeBSD 9 매뉴얼 페이지 ). -m옵션 이 없습니다 .
JdeBP

@ JdeBP : 감사합니다. 그것은 가지고 -f, 그리고 readlink -f단지뿐만 아니라 (링크 대상이 존재 가정) 작동합니다. BSD에서 realpath다른 대안으로 보입니다 readlink -m.
user1686 년

0

한 가지 방법은 (더 나은 버전을 기대하고 있습니다)

olddir=$(pwd)
cd /var/opt/foo
deleteme=$(pwd)
cd $olddir
rm -rf "$olddir"

4
readlink당신의 친구입니다.
JdeBP
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.