我想为特定文件夹创建桌面快捷方式,该快捷方式埋在内~/Library/
。Lion默认情况下将“图书馆”隐藏,出于各种原因,我想保持这种状态。我可以使用一个一步的命令行操作来创建到给定路径的桌面快捷方式吗?我想避免涉及取消隐藏库,使用Finder创建Alias以及隐藏它的解决方案。我知道该怎么做,但出于我的目的,最好将一行粘贴到Terminal中并完成。
我想为特定文件夹创建桌面快捷方式,该快捷方式埋在内~/Library/
。Lion默认情况下将“图书馆”隐藏,出于各种原因,我想保持这种状态。我可以使用一个一步的命令行操作来创建到给定路径的桌面快捷方式吗?我想避免涉及取消隐藏库,使用Finder创建Alias以及隐藏它的解决方案。我知道该怎么做,但出于我的目的,最好将一行粘贴到Terminal中并完成。
Answers:
在终端上尝试:
cd ~/Desktop
ln -s ~/Library/path/to/folder
folder
不是必需的。如果您省略它,则ln
创建一个与原始文件夹名称相同的链接。
可以在终端的一行中完成此操作。假设您要别名文件“ /Users/me/Library/Preferences/org.herf.Flux.plist”。
osascript -e 'tell application "Finder"' -e 'make new alias to file (posix file "/Users/me/Library/Preferences/org.herf.Flux.plist") at desktop' -e 'end tell'
如果您有文件夹,则应替换to file
为to folder
。
这是一个shell脚本,它允许您传递文件或文件夹路径来创建别名:
#!/bin/bash
if [[ -f "$1" ]]; then
type="file"
else
if [[ -d "$1" ]]; then
type="folder"
else
echo "Invalid path or unsupported type"
exit 1
fi
fi
osascript <<END_SCRIPT
tell application "Finder"
make new alias to $type (posix file "$1") at desktop
end tell
END_SCRIPT
如果你的名字这个脚本make-alias.sh
,chmod u+x make-alias.sh
并把它/usr/local/bin
,你可以运行如make-alias.sh ~/Library/Preferences
。
~/Library/Preferences/org.herf.Flux.plist"
工作,还是用户名需要被明确列入终端命令?
~
,但不适用于单行osascript
命令。我建议改用脚本文件,因为~
会自动转换。
/Library/Application Support/
~
扩展。最好不要使用引号,并使用制表符完成文件名,以便bash可以正确地“转义”特殊字符。例如,~/Library/Application
然后按Tab键。如果Application Support
是唯一的匹配项,则外壳程序应该在空格之前插入反斜杠。您也可以手动使用反斜杠进行转义。
如果你需要为目标,在一个特定的文件夹中的链接(或给它一个特定的名字),你可以使用set name of result to "…"
如
#!/bin/bash
if [[ $# -ne 2 ]]; then
echo "mkalias: specify 'from' and 'to' paths" >&2
exit 1
fi
from="$(realpath $1)"
todir="$(dirname $(realpath $2))"
toname="$(basename $(realpath $2))"
if [[ -f "$from" ]]; then
type="file"
elif [[ -d "$from" ]]; then
type="folder"
else
echo "mkalias: invalid path or unsupported type: '$from'" >&2
exit 1
fi
osascript <<EOF
tell application "Finder"
make new alias to $type (posix file "$from") at (posix file "$todir")
set name of result to "$toname"
end tell
EOF
#!/bin/bash
get_abs() {
# $1 : relative filename
echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")"
}
if [[ $# -ne 2 ]]; then
echo "mkalias: specify 'from' and 'to' paths" >&2
exit 1
fi
from=$(eval get_abs $1)
todir=$(dirname $(eval get_abs $2))
toname=$(basename $(eval get_abs $2))
if [[ -f "$from" ]]; then
type="file"
elif [[ -d "$from" ]]; then
type="folder"
else
echo "mkalias: invalid path or unsupported type: '$from'" >&2
exit 1
fi
osascript <<EOF
tell application "Finder"
make new alias to $type (posix file "$from") at (posix file "$todir")
set name of result to "$toname"
end tell
EOF
对于想要python解决方案的人,这是一个包装applescript的函数,然后调用subprocess.call:
def applescript_finder_alias(theFrom, theTo):
"""
(theFrom, theTo)
create a short/alias
theFrom, theTo: relative or abs path, both folder or both file
"""
# /apple/51709
applescript = '''
tell application "Finder"
make new alias to %(theType)s (posix file "%(theFrom)s") at (posix file "%(todir)s")
set name of result to "%(toname)s"
end tell
'''
def myesp(cmdString):
import os, inspect, tempfile, subprocess
caller = inspect.currentframe().f_back
cmd = cmdString % caller.f_locals
fd, path = tempfile.mkstemp(suffix='.applescript')
try:
with os.fdopen(fd, 'w') as tmp:
tmp.write(cmd.replace('"','\"').replace("'","\'")+'\n\n')
subprocess.call('osascript ' + path, shell=True, executable="/bin/bash")
finally:
os.remove(path)
return None
import os
theFrom = os.path.abspath(theFrom)
theTo = os.path.abspath(theTo)
if os.path.isfile(theFrom):
theType = 'file'
else:
theType = 'folder'
todir = os.path.dirname(theTo)
toname = os.path.basename(theTo)
myesp(applescript)
ln -s ~/Library/path/to/folder folder
。此方法(即符号链接)的一个次要缺点是,如果“原始”(即目标)被移动或重命名,则链接将断开。