디렉토리의 심볼릭 링크를 덮어 쓰는 방법은 무엇입니까?


15

이 두 디렉토리는 다음 foo1foo2.

처음에는에 의해 심볼릭 링크를 ln -s foo1 bar만듭니다. 그 후 심볼릭 링크를 변경하고 싶었습니다.ln -sf foo2 bar

하지만 bar여전히foo1 있습니다. Symlink foo2는 내부에 생성됩니다 foo1.

교체 할 때 무엇을 입력해야합니까 foo1foo2?

세 가지 환경에서 테스트했습니다.

  1. 우분투 12.04, ln (GNU coreutils) 8.13
  2. CentOS 6.4, ln (GNU coreutils) 8.4
  3. OS X 10.7.5, ln (버전 미포함)

답변:


18

이를 수행하는 올바른 방법은 -n, --no-dereference옵션 을 사용하는 것입니다.

$ ln -snf foo2 bar

이것은 ln기존의 심볼릭 링크를 파일로 취급합니다. 그렇지 않으면 역 참조 bar하기 foo1로 하강 foo1하고 원래 사용 TARGET은 AS 이름을 LINK_NAME그의 왜 당신이 심볼릭 링크와 끝까지 foo2내부에 생성되는 foo1디렉토리. 맨 페이지의 ln내용은 다음과 같습니다.

-n, --no-dereference
       LINK_NAME이 (가) 파일에 대한 심볼릭 링크 인 경우 일반 파일로 취급
       예배 규칙서

아래는 버전 8.21의 옵션이 있거나 ln없는 Arch Linux 데스크탑의 셸 출력입니다 . --no-dereference옵션 없이는 동일한 결과를 얻었 --no-dereference지만 --no-dereference예상대로 작동 하는 옵션을 사용했습니다.

$ mkdir foo1 foo2
$ ln -s foo1 bar
$ ls -l bar
  lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ln -sf foo2 bar
$ ls -l bar
  lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ls -l foo1
  total 0
  lrwxrwxrwx 1 drew users 4 Sep 17 12:51 foo2 -> foo2
$ ln -snf foo2 bar
$ ls -l bar
  lrwxrwxrwx 1 drew users 4 Sep 17 12:52 bar -> foo2

답변 주셔서 감사합니다. 환경 의존적 인 문제라면 환경을 쓸 것입니다. 어떤 운영 체제를 사용하고 있습니까? 어떤 출력 ln --version?
ironsand

버전 8.17의 Fedora 18 VM에서 이것을 시도했습니다. 흥미롭게도 버전 8.21의 Arch Linux 데스크탑에서 시도한 결과와 동일한 결과를 얻었습니다. 이 두 버전 사이에 뭔가 변경된 것 같습니다. 내가 게시 한 솔루션은 두 경우 모두에서 작동했습니다.
Drew Chapin

참고로, justlinux.com 포럼 에서이 답변을 찾았습니다 .
Drew Chapin

감사합니다 druciferre! 나는 ln명령이 너무 자주 업그레이드 된다고 생각조차하지 못했습니다 .
ironsand

나는 또한 osx에서 테스트했습니다. ln디렉토리를 덮어 쓰고 ln -snf문제를 해결 하면서 우분투 및 centos와 동일하게 작동합니다 . ln -hosx에서 사용하는 것이 선호 되지만 .
ironsand
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.