我制作了这个Applescript脚本来创建符号链接
来自POSIX path of
的公寓,如何获取已删除文件的文件名,而不是路径?
on open filelist
repeat with i in filelist
do shell script "ln -s " & POSIX path of i & " /Users/me/Desktop/symlink"
end repeat
end open
PS:我知道这需要删除许多文件并尝试创建许多具有相同名称的链接,这会产生错误。实际上我从一个网站复制了这个例子,因为我几乎不知道关于Applescript的任何事情,我不知道如何为一个文件做这个,对此的帮助也将受到赞赏。
答案 0 :(得分:1)
例如,您可以使用Finder而不是shell脚本来获取保存为应用程序的脚本上删除的单个文件的名称。如果您不需要显示对话框,则可以将其删除,但是您可以将文件名作为变量来使用:
on open the_files
repeat with i from 1 to the count of the_files
tell application "Finder"
set myFileName to name of (item i of the_files)
end tell
display dialog "The file's name is " & myFileName
end repeat
end open
答案 1 :(得分:1)
我不确定你究竟想要做什么,但我有一个猜测。您是想要将每个文件都放在脚本上并创建一个符号链接到桌面上的每个文件?如果我放弃~/look/at/me
和~/an/example
,您将拥有~/Desktop/me
和~/Desktop/example
?如果这就是你想要的,那么你很幸运:ln -s <file1> <file2> ... <directory>
正是如此。 (编辑:虽然您必须注意两个参数的情况。)因此,您的代码可能如下所示:
-- EDITED: Added the conditional setting of `dest` to prevent errors in the
-- two-arguments-to-ln case (see my comment).
on quoted(f)
return quoted form of POSIX path of f
end quoted
on open filelist
if filelist is {} then return
set dest to missing value
if (count of filelist) is 1 then
tell application "System Events" to set n to the name of item 1 of filelist
set dest to (path to desktop as string) & n
else
set dest to path to desktop
end if
set cmd to "ln -s"
repeat with f in filelist & dest
set cmd to cmd & " " & quoted(f)
end repeat
do shell script cmd
end open
注意使用quoted form of
;它将其参数包装在单引号中,因此在shell中执行将不会做任何有趣的事情。
如果您想以其他原因获取文件名,则无需致电Finder;您可以改为使用系统事件:
tell application "System Events" to get name of myAlias
将返回myAlias
中存储的文件的名称。
编辑:如果您想对单个文件执行某些操作,则非常简单。而不是使用repeat
迭代每个文件,只需对item 1 of theList
访问的第一个文件执行相同的操作。所以在这种情况下,您可能需要这样的东西:
-- EDITED: Fixed the "linking a directory" case (see my comment).
on quoted(f)
return quoted form of POSIX path of f
end quoted
on open filelist
if filelist is {} then return
set f to item 1 of filelist
tell application "System Events" to set n to the name of f
do shell script "ln -s " & ¬
quoted(f) & " " & quoted((path to desktop as string) & n)
end open
它几乎相同,但我们抓住filelist
中的第一项并忽略其余项。此外,最后,我们显示一个包含符号链接名称的对话框,以便用户知道发生了什么。