ターミナルからフォルダーへのデスクトップショートカット/エイリアスを作成できますか?


17

特定のフォルダへのデスクトップショートカットを作成します~/Library/。Lionではデフォルトでライブラリは非表示になっていますが、さまざまな理由でそのように保ちたいと思います。特定のパスへのデスクトップショートカットを作成するために使用できるワンステップのコマンドラインアクションはありますか?ライブラリを非表示にし、Finderを使用してエイリアスを作成し、再表示することを含むソリューションを避けたいと思います。私はそれを行う方法を知っていますが、私の目的のために、ターミナルに貼り付けてそれで行うことができる単一の行が望ましいでしょう。

回答:


10

ターミナルでこれを試してください:

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

5
私はあなたが意味したと思いますln -s ~/Library/path/to/folder folder。この方法(つまり、シンボリックリンク)の1つの小さな欠点は、「オリジナル」(つまりターゲット)が移動または名前変更された場合にリンクが切断されることです。
ケルビン

2
2番目の引数folderは必須ではありません。省略すると、ln元のフォルダーと同じ名前のリンクが作成されます。
ボイ

ああ、あなたは正しい。以前にエラーが発生しましたが、何か間違って入力したに違いありません。
ケルビン

1
私はそれが何であったかを知っています-あなたは最後のスラッシュを持つことができません!
ケルビン

12
OSXエイリアスはシンボリックリンクではありませんstackoverflow.com/questions/11165799/…を
。– bfontaine

13

ターミナルの1行で行うことができます。ファイル「/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必要があります。

ファイルまたはフォルダーのパスを渡してエイリアスを作成できるシェルスクリプトを次に示します。

#!/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"仕事、またはユーザ名の必要性を明示的にターミナルコマンドに含まれるのでしょうか?
LessPop_MoreFizz

使用~してみたところ、1行のosascriptコマンドでは機能しません。~が自動的に変換されるため、代わりにスクリプトファイルを使用することをお勧めします。
ケルビン

うーん。以下のようなスペースでファイル名に分割するようだ/Library/Application Support/
LessPop_MoreFizz

bashスクリプトを使用している場合、ファイル名にスペースまたは特殊文字が含まれている場合は、ファイル名を一重引用符で囲む必要があります。ただし、これにより~、展開されなくなります。最良の方法は、引用符を使用せず、ファイル名をタブ補完してbashが特殊文字を適切に「エスケープ」することです。たとえば、タイプして~/Library/Applicationからタブを押します。Application Support唯一の一致であった場合、シェルはスペースの前にバックスラッシュを挿入する必要がありました。手動でバックスラッシュを使用してエスケープすることもできます。
ケルビン

スペース/特殊文字の問題はどのソリューションにも存在することに注意してください-シェルは、2つの個別のパラメーターではなく1つのパラメーターを渡すことを認識できません。
ケルビン

1

特定のフォルダーでリンクをターゲットにする(または特定の名前を付ける)必要がある場合は、次のように使用できます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

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

スクリプトがどのように機能するかの説明が役立つだろう
-user151019

上記と同じしかし、実パスを必要とせずにスクリプトとして
アンドリュー・マクルーア

0

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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.