폴더가 존재하는 경우 심볼릭 링크를 생성하지 않는 방법이 있습니까?

폴더가 존재하는 경우 심볼릭 링크를 생성하지 않는 방법이 있습니까?

나는 다음과 같은 것을 가지고 있습니다

폴더 A 그리고 이 작업을 수행하면 ln -s A a 심볼릭 링크 폴더 a가 생성됩니다. 이제 명령을 반복하면 ln -s A a데드 링크 a/A가 발생합니다.

ifexists 문으로 모든 것을 래핑하는 대신 링크가 존재하는 경우 ln을 실패하게 만드는 방법이 있습니까?

답변1

찾고 있는 것이 단일 명령에 대한 단일 조건부 테스트인 경우 해당 명령문이 필요하지 않습니다 if.목록.

에 따르면 LESS=+/Lists man bash:

   A  list  is a sequence of one or more pipelines separated by one of the
   operators ;, &, &&, or ||, and optionally terminated by one of ;, &, or
   <newline>.
...
   An AND list has the form

         command1 && command2

   command2  is  executed if, and only if, command1 returns an exit status
   of zero.

존재하려는 폴더가 존재하고 해당 디렉토리가 존재하는 경우에만 링크를 생성하고 싶다고 가정해 보겠습니다 mydir. mylink2dir당신이 사용할 수있는:

[ -d mydir ] && ln -s mydir mylink2dir

또는 동등하게:

test -d mydir && ln -s mydir mylink2dir

답변2

-n디렉터리 생성을 방지하려면 이 옵션을 사용하십시오 . 이렇게 하면 기존 기호 링크를 덮어쓰지만 기존 기호 링크가 가리키는 디렉터리 내에 링크가 생성되지는 않습니다.

ln -sn A a

ln -nPOSIX는 아니지만 GNU coreutils, BusyBox 및 *BSD(OSX 포함)에 존재합니다.

관련 정보