나는 다음과 같은 것을 가지고 있습니다
폴더 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 -n
POSIX는 아니지만 GNU coreutils, BusyBox 및 *BSD(OSX 포함)에 존재합니다.