我正在尝试在一组目录中创建目录的别名
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打开了权限,没有任何运气。
答案 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
请注意,ln
和cp
命令具有相同的文件顺序。
在您的命令中,您一遍又一遍地将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