it-swarm-ko.tech

상대 경로 이름에 대한 심볼릭 링크 만들기

나는 이것을 할 수있다 :

$ 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에 전달할 수 있습니까?

65
Humphrey Bogart

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

예제가 작동하지 않는 이유는 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 문자를 포함 할 수없는 유일한 제한 사항이 있음), 심볼릭 링크를 사용하고 확인할 때 해당 문자열은 심볼릭 링크의 상위 디렉토리 (/로 시작하지 않는 경우).

66
penguin359

최신 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
25
ptr

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

12
Shadur

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

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

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
3
MattBianco

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

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

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

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

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

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

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

0
mreff555