상대 경로 이름에 대한 심볼릭 링크 만들기 있기를 원합니다. $ pwd /home/beau $ cd foo $ ln

나는 이것을 할 수있다 :

$ pwd
/home/beau
$ ln -s /home/beau/foo/bar.txt /home/beau/bar.txt
$ readlink -f bar.txt
/home/beau/foo/bar.txt

그러나 나는 이것을 할 수 있기를 원합니다.

$ pwd
/home/beau
$ cd foo
$ ln -s bar.txt /home/beau/bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt

이게 가능해? 어떻게 든 상대 경로 이름을 확인하고 전달할 수 ln있습니까?



답변

상대 경로에 대한 심볼릭 링크를 만들면 예제에 표시된 것처럼 절대적이 아닌 상대 심볼릭 링크로 저장됩니다. 이것은 일반적으로 좋은 것입니다. 파일 시스템이 다른 곳에 마운트 된 경우 절대 기호 링크가 작동하지 않습니다.

예제가 작동하지 않는 이유 ln는 실행 위치 가 아니라 기호 링크의 상위 디렉토리에 상대적이기 때문 입니다.

넌 할 수있어:

$ pwd
/home/beau
$ ln -s foo/bar.txt bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt

또는 그 문제에 대해 :

$ cd foo
$ ln -s foo/bar.txt ../bar.txt

첫 번째 인수 이후 ln -s의 심볼은 심볼릭 링크의 대상으로 저장됩니다. 임의의 문자열이 될 수 있지만 (비어있을 수없고 NUL 문자를 포함 할 수없는 유일한 제한 사항이 있음), 심볼릭 링크를 사용하고 확인할 때 해당 문자열은 symlink의 상위 디렉토리 (로 시작하지 않을 때 /).


답변

최신 coreutils (coreutils-8.22-11을 사용하고 있음)를 사용하는 경우 다음과 같은 옵션이 있습니다.

ln --help | grep relative

임의의 텍스트를 보유 할 수 있습니다. 나중에 해결되면 상대 링크는 -r입니다.-상대 링크 위치와 관련된 심볼릭 링크를 만듭니다.

예를 들면 다음과 같습니다.

$ mkdir /tmp/test
$ touch /tmp/test/to
$ ln -rs /tmp/test/to /tmp/test/from
$ ls -l /tmp/test/from
    lrwxrwxrwx 1 ptr ptr 4 aug   25 17.02 /tmp/test/to -> from


답변

죄송합니다 심볼릭 링크는 링크를 만들 때 있었던 위치가 아니라 링크가있는 위치를 기준으로합니다. 이 동작에는 몇 가지 이유가 있으며 대부분 원격 파일 시스템 마운트와 관련이 있습니다.


답변

symlinks많은 Linux 배포판에 있는 편리한 작은 유틸리티 (원래 Mark Lords, 현재 J. Brandt Buckley가 유지 관리)가 있습니다.

디렉토리의 모든 절대 기호 링크를 상대 링크로 변환하려면 다음을 수행하십시오.

symlinks -c /path/to/directory

불행히도 단일 링크를 변환 할 수있는 옵션이 없으므로 먼저 해당 링크를 자체 디렉토리로 이동해야합니다.

mkdir ../tmp
mv link-to-relativize ../tmp
symlinks ../tmp
mv ../tmp/* .
rmdir ../tmp


답변

시도해 볼 수 있습니다 :

ln -s `pwd`/bar.txt /home/beau/bar.txt

그러나 절대 경로 이름에 대한 심볼릭 링크를 만듭니다. 텍스트 질문에 상대 경로 이름이 언급되어 있습니다 …

일반적으로 상대 경로 이름은 원하는 것과 ln -s제공하는 것입니다. 나는 당신이 원하는 것이 있다고 생각합니다.

cd /home/beau
ln -s foo/bar.txt bar.txt


답변

가장 일반적인 쉘이 경로를 확장함에 따라 상대 심볼릭 링크를 만들려면 “소스 경로”를 인용해야합니다.

또한 -s매개 변수는를 의미 --symbolic합니다. ln기본적으로 하드 링크를 만듭니다.

$ ln -s '../../relative_path' path
$ ls -al path

lrwxrwxrwx 1 empjustine empjustine 19 Aug  6 01:38 path -> ../../relative/path


답변

마운트 포인트가 변경 될 가능성이없는 경우 다음과 같이 bash 쉘에서 수행하려는 작업을 수행 할 수 있습니다.

ln -s `pwd`/bar.txt ~/bar.txt

이는 심볼릭 링크를 만들 때 대상 디렉토리에 있다고 가정합니다.