터미널에서 폴더로 바탕 화면 바로 가기 / 별칭을 만들 수 있습니까?


17

에 깊이 묻혀있는 특정 폴더에 대한 바탕 화면 바로 가기를 만들고 싶습니다 ~/Library/. Lion은 도서관이 기본적으로 숨겨져 있으며 여러 가지 이유로 보관하고 싶습니다. 주어진 경로에 대한 바탕 화면 바로 가기를 만들기 위해 사용할 수있는 한 단계의 명령 줄 작업이 있습니까? 라이브러리 숨기기를 해제하고 Finder를 사용하여 별칭을 만든 다음 다시 숨기는 솔루션을 피하고 싶습니다. 나는 그것을하는 방법을 알고 있지만, 내 목적을 위해 터미널에 붙여 넣을 수있는 단일 행이 바람직합니다.

답변:


10

터미널에서 이것을 시도하십시오 :

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

5
나는 당신이 의미하는 것 같아요 ln -s ~/Library/path/to/folder folder. 이 방법 (예 : 심볼릭 링크)의 한 가지 단점은 "원본"(예 : 대상)을 이동하거나 이름을 바꾸면 링크가 끊어진다는 것입니다.
Kelvin

2
두 번째 주장 folder은 필요하지 않습니다. 생략 ln하면 원래 폴더와 동일한 이름의 링크가 작성됩니다.
Boj

아 맞아. 전에 오류가 발생했지만 잘못 입력해야합니다.
Kelvin

1
나는 그것이 무엇인지 알고 있습니다-당신은 슬래시를 가질 수 없습니다!
Kelvin

12
OSX 별명은 기호 링크 가 아닙니다 . 참조 stackoverflow.com/questions/11165799/...
bfontaine

13

한 줄의 터미널에서 할 수 있습니다. "/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 fileto 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

방금 사용을 시도했지만 ~한 줄 osascript명령으로 작동하지 않습니다 . 대신 ~자동으로 변환 되므로 스크립트 파일을 사용하는 것이 좋습니다 .
켈빈

흠. /Library/Application Support/
LessPop_MoreFizz 다음

bash 스크립트를 사용하는 경우 파일 이름에 공백이나 특수 문자가 있으면 작은 따옴표로 묶어야합니다. 그러나 이렇게하면 ~확장 되지 않습니다. 가장 좋은 방법은 따옴표를 사용하지 않고 파일 이름을 탭하여 bash가 특수 문자를 올바르게 "탈출"하는 것입니다. 예를 들어 ~/Library/Application탭을 누르십시오. 경우 Application Support만 일치했다, 쉘은 공간 앞에 백 슬래시를 삽입해야합니다. 백 슬래시를 수동으로 사용하여 이스케이프 할 수도 있습니다.
Kelvin

공백 / 특수 문자 문제는 모든 솔루션에 존재합니다. 쉘은 2 개의 개별 매개 변수가 아닌 1 개의 매개 변수를 전달한다는 것을 알 수 없습니다.
Kelvin

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

위의 스크립트와 동일하지만 경로가 필요하지 않음
Andrew McClure

0

파이썬 솔루션을 원하는 사람들을 위해 애플 스크립트를 래핑 한 다음 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.