Ich möchte eine Desktop-Verknüpfung zu einem bestimmten Ordner erstellen, der tief in ~/Library/
. Die Bibliothek ist in Lion standardmäßig ausgeblendet, und ich möchte dies aus verschiedenen Gründen beibehalten. Gibt es eine einstufige Befehlszeilenaktion, die ich verwenden kann, um eine Desktopverknüpfung zu einem bestimmten Pfad zu erstellen? Ich möchte Lösungen vermeiden, die das Einblenden der Bibliothek, das Erstellen des Alias mit dem Finder und das erneute Ausblenden beinhalten. Ich weiß, wie das geht, aber für meine Zwecke wäre eine einzelne Zeile, die in Terminal eingefügt und damit erledigt werden kann, vorzuziehen.
Versuchen Sie dies im Terminal:
cd ~/Desktop
ln -s ~/Library/path/to/folder
Es ist möglich, dies in einer Zeile des Terminals zu tun. Angenommen, Sie möchten einen Alias auf die Datei „/Users/me/Library/Preferences/org.herf.Flux.plist“ erstellen.
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
Sie sollten durch ersetzen, to folder
wenn Sie einen Ordner haben.
Hier ist ein Shell-Skript, mit dem Sie einen Datei- oder Ordnerpfad übergeben können, um den Alias zu erstellen:
#!/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
Wenn Sie dieses Skript benennen make-alias.sh
und chmod u+x make-alias.sh
einfügen /usr/local/bin
, können Sie zB ausführen make-alias.sh ~/Library/Preferences
.
~/Library/Preferences/org.herf.Flux.plist"
oder muss der Benutzername explizit in den Terminal-Befehl aufgenommen werden?~
und es funktioniert nicht mit dem einzeiligen osascript
Befehl. Ich schlage vor, stattdessen die Skriptdatei zu verwenden, da die ~
automatisch konvertiert wird./Library/Application Support/
~
jedoch eine Erweiterung. Das Beste ist, keine Anführungszeichen zu verwenden und den Dateinamen mit der Tabulatortaste zu vervollständigen, damit Bash die Sonderzeichen ordnungsgemäß "escaped" wird. Geben Sie zB ein ~/Library/Application
und drücken Sie dann die Tabulatortaste. Wenn Application Support
es die einzige Übereinstimmung war, hätte die Shell vor dem Leerzeichen einen umgekehrten Schrägstrich einfügen sollen. Sie können auch manuell einen umgekehrten Schrägstrich verwenden, um zu entkommen.osascript -e "tell app \"Finder\" to make new alias to (posix file \"$1\") as alias at desktop"
.Falls Sie den Link auf einen bestimmten Ordner ausrichten müssen (oder ihm einen bestimmten Namen geben müssen), können Sie set name of result to "…"
as in verwenden
#!/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
Für Leute, die eine Python-Lösung möchten, hier ist eine Funktion, die Applescript umschließt und dann subprocess.call aufruft:
def applescript_finder_alias(theFrom, theTo):
"""
(theFrom, theTo)
create a short/alias
theFrom, theTo: relative or abs path, both folder or both file
"""
# https://apple.stackexchange.com/questions/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)
Kelvin
ln -s ~/Library/path/to/folder folder
. Ein kleiner Nachteil dieser Methode (dh Symlinking) ist, dass der Link unterbrochen wird, wenn das "Original" (dh das Ziel) verschoben oder umbenannt wird.Boj
folder
ist nicht erforderlich. Wenn Sie es weglassen,ln
wird ein Link mit dem gleichen Namen wie der ursprüngliche Ordner erstellt.Kelvin
Kelvin
bfontaine
igal
motorbaby