我有类似的东西
文件夹 A ,当我这样做时,ln -s A a
它会创建符号链接文件夹 a 现在,如果我重复该命令,ln -s A a
我会得到死链接 a/A
有没有一种方法可以让 ln 失败(如果链接存在),而不是将所有内容都包装在 ifexists 语句中?
答案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)上。