24 votes

Puis-je créer un raccourci/alias de bureau vers un dossier à partir du terminal ?

J'aimerais créer un raccourci sur le bureau vers un dossier spécifique, enfoui dans les profondeurs de l'ordinateur. ~/Library/ . Library est caché par défaut dans Lion, et j'aimerais que cela reste ainsi, pour diverses raisons. Existe-t-il une action en ligne de commande, en une seule étape, que je puisse utiliser pour créer un raccourci sur le bureau vers un chemin donné ? J'aimerais éviter les solutions qui impliquent de démasquer la bibliothèque, de créer l'alias à l'aide du Finder et de le masquer à nouveau. Je sais comment faire, mais pour mes besoins, une seule ligne qui peut être collée dans le Terminal et en finir avec elle serait préférable.

17voto

erichui Points 1488

Il est possible de le faire en une seule ligne de Terminal. Disons que vous voulez aliaser le fichier "/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'

Vous devez remplacer to file avec to folder si vous avez un dossier.

Voici un shell script qui vous permet de passer dans un fichier ou un chemin de dossier pour créer l'alias :

#!/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

Si vous nommez ce script make-alias.sh , chmod u+x make-alias.sh et le mettre dans /usr/local/bin vous pouvez, par exemple, exécuter make-alias.sh ~/Library/Preferences .

0 votes

Will ~/Library/Preferences/org.herf.Flux.plist" fonctionne, ou le nom d'utilisateur doit-il être explicitement inclus dans la commande Terminal ?

0 votes

Je viens d'essayer d'utiliser ~ et cela ne fonctionne pas avec la ligne unique osascript commande. Je suggère d'utiliser le fichier script à la place, parce que la commande ~ est converti automatiquement.

0 votes

Hmm. Il semble qu'il y ait une rupture sur les noms de fichiers avec des espaces tels que /Library/Application Support/

13voto

Boj Points 422

Essayez ceci sur Terminal :

cd ~/Desktop
ln -s ~/Library/path/to/folder

5 votes

Je pense que tu voulais dire ln -s ~/Library/path/to/folder folder . Un inconvénient mineur de cette méthode (c'est-à-dire l'établissement de liens symboliques) est que le lien sera rompu si l'"original" (c'est-à-dire la cible) est déplacé ou renommé.

2 votes

Le deuxième argument folder n'est pas nécessaire. Si vous l'omettez, ln crée un lien nommé de la même façon que le dossier d'origine.

0 votes

Ah, vous avez raison. J'ai eu une erreur avant, mais j'ai dû faire une faute de frappe.

2voto

Andrew McClure Points 11
#!/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

0 votes

Une explication du fonctionnement du script serait utile.

0 votes

Identique à script ci-dessus mais sans besoin de realpath.

1voto

Jamie Points 332

Si vous devez cibler le lien vers un dossier spécifique (ou lui donner un nom spécifique), vous pouvez utiliser la fonction set name of result to "…" dans le cas de

#!/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

0voto

Ehtesh Choudhury Points 1395

Pour les personnes qui souhaiteraient une solution Python, voici une fonction enveloppant applescript, puis appelant 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
    """
    # 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)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X