无法找到符号链接源项

时间:2015-04-20 21:07:50

标签: macos bash shell alias symlink

我正在尝试在一组目录中创建目录的别名

for D in $(find * -maxdepth 0 -type d) ; do
    ln -s location/to/directory/ $D/Test2 ;
done

看起来链接是正确的(我可以在我的finder窗口中看到它),但是当我双击它时,我收到错误The operation can't be completed because the original item for "Test2" can't be found.

为什么这不起作用?有没有办法从bash脚本制作“普通”mac别名?我按照建议here打开了权限,没有任何运气。

3 个答案:

答案 0 :(得分:0)

创建链接时使用绝对源路径。这对我有同样的问题。

答案 1 :(得分:0)

您希望在当前目录的每个目录中创建名为Test2的符号链接,并且每个创建的链接都应指向location/to/directory

for dir in */; do
    ln -s 'location/to/directory' "$dir/Test2"
done

*之后的斜杠确保我们只匹配当前目录中的目录,或者链接到当前目录中的目录。

如果您只对真实目录感兴趣而不是符号链接目录,则可以使用

find . -type d -mindepth 1 -maxdepth 1 \
    -exec ln -s 'location/to/directory' {}/Test2 ';'

请注意,链接目标是相对于链接的位置,因此如果目录不包含location/to/directory,则链接将“死”。

您可以通过指定链接的绝对路径来解决此问题。

答案 2 :(得分:-1)

你想做什么?

链接视为cp命令。也许这会有所帮助:

# Copies the 'svnadmin' command from /opt/svn/bin to /usr/local/bin
$ cp /opt/svn/bin/svnadmin /usr/local/bin

# Links the 'svnadmin' command from /opt/svn/bin to /usr/local/bin
$ ln -s /opt/svn/bin/svnadmin /usr/local/bin

请注意,lncp命令具有相同的文件顺序。

在您的命令中,您一遍又一遍地将location/to/directory/$D/test2联系起来。

此外,-maxdepth 0不会出现在目录的第一级。

我在安装新软件时使用ln,而二进制命令位于其他目录中。我没有在$PATH上构建包含所有这些额外目录,而是象征性地将它们链接到/usr/local/bin

$ cd /usr/share/apache-ant/bin
$ for file in *
> do
>     [[ -f $file ]] || continue
>     ln -s $PWD/$file /usr/local/bin/$file
> done

请注意,链接只是将第一个文件的整个引用复制到链接。我想确保此链接在任何地方都有效,因此我在其前面加$PWD前缀。这样,我的链接看起来像这样:

$ ls -l ant
lrwxr-xr-x  1 root  wheel  29 Sep  3  2014 ant -> /usr/share/apache-ant/bin/ant