【发布时间】:2009-12-18 20:14:35
【问题描述】:
我正在尝试使用mdfind 的输出来创建一堆符号链接。 mdfind 的输出是这样的:
/pathtofile1/
/pathtofile2/
/pathtofile3/
所以,我用sed将ln -s添加到每行的开头,并使用awk {print $0 "/directory where I want this/"};
在我的单行脚本成功输出后:
ln -s "/pathtofile1/" "/我想要这个的目录"
ln -s "/pathtofile2/" "/我想要这个的目录"
ln -s "/pathtofile3/" "/我想要这个的目录"
问题是,当我运行它时,我得到这个错误:“/directory where I want this: File does not exist”
奇怪的是,当我单独运行这些行时,它们的链接按预期创建,但运行整个命令会返回上述错误。
有什么想法吗?
我认为这不是做我想做的事情的理想方式,所以如果您有任何更好的解决方案,请告诉我。
编辑了更多信息。
#! /bin/bash
itemList=`mdfind -s "$1"| awk '{ print "ln -s \""$0"\" \"/Users/username/Local/Recent\""}'`
echo "$itemList"
`$itemList`
$1 是一个测试 *.savedSearch,它返回一个文件列表。
我的结果(来自回声)是:
ln -s "/Users/username/Dropbox/Document.pdf" "/Users/username/Local/Recent"
ln -s "/Users/username/Dropbox/Document2.pdf" "/Users/username/Local/Recent"
我得到的错误是:
ln: "/Users/username/Local/Recent": 没有这样的文件或目录
但是,如果我单独运行每行的复制粘贴,则链接会按预期创建。
【问题讨论】:
-
将其更改为仅使用 'awk' 并且错误仍在发生...
-
这些解决方案有帮助吗? (将一个答案标记为已接受或更好地解释您正在寻找的内容被认为是一种很好的 SO 礼仪。)
-
您的一个问题是脚本的最后一行,其中包含
$items的反引号。 hat 将列表扁平化为一行,执行它,并捕获标准输出(没有),然后执行那个空字符串!建议:在第二个引号后的awk中输出一个分号,括住目标目录名称。这将为您留下有效的外壳。然后,在执行“脚本”时,不要将其括在反引号中。您可能需要eval,或者您可以简单地将awk脚本的输出通过管道传输到sh(或bash),还可以选择使用-x进行跟踪。
标签: macos symlink spotlight ln