ln -s:从一个源到多个目的地

Léo*_* 준영 8 symlink

伪代码

ln -s $HOME/file $HOME/Documents/ $HOME/Desktop/
Run Code Online (Sandbox Code Playgroud)

我想在其中创建从源到两个目的地的符号链接。大概,moreutilspee


如何从一个来源创建多个符号链接?

Ser*_*rge 11

您不能通过一次调用来做到这一点ln,但您可以遍历所有必要的目的地:

$ for i in "$HOME/Documents/" "$HOME/Desktop/"; do ln -s "$HOME/file" "$i"; done
Run Code Online (Sandbox Code Playgroud)

  • 如果您的主目录不包含空格或其他要转义的字符,例如标点符号,您可以省略引号。但是,始终在适当的地方使用引号会形成一种习惯,使您在目录/文件名很容易包含特殊字符的其他情况下不会出错 (2认同)

don*_*sti 6

如果你有gnu parallel你可以尝试

parallel ln -s /path/file {} ::: /path/dest1 /path/dest2 /path/dest3
Run Code Online (Sandbox Code Playgroud)

或者,将多个目标符号链接到(相同的)多个目标

parallel ln -s {1} {2} ::: /path/file1 /path/file2 ::: /path/dest1 /path/dest2
Run Code Online (Sandbox Code Playgroud)

  • @Masi 确保您从 `parallel` 包运行 `parallel` 命令,而不是从 `moreutils` 运行的命令。 (2认同)

Ste*_*itt 5

它并不比两个单独的ln -s调用更冗长:

echo $HOME/Documents/ $HOME/Desktop/ | xargs -n 1 ln -s $HOME/file
Run Code Online (Sandbox Code Playgroud)

但这仅适用于绝对路径(因为符号链接是相对于其父目录解释的,除非它们是绝对路径)。

(当然,随着链接数量的增加,相对成本会下降。此外,此代码段依赖于$HOME不包含任何空格、制表符或换行符的事实。)