Terminalden bir Klasöre Masaüstü Kısayolu / Takma Ad oluşturabilir miyim?


17

İçeride gömülü olan belirli bir klasöre masaüstü kısayolu oluşturmak istiyorum ~/Library/. Kütüphane Lion'da varsayılan olarak Gizlidir ve bunu çeşitli nedenlerle bu şekilde tutmak istiyorum. Belirli bir yola bir masaüstü kısayolu oluşturmak için kullanabileceğim tek adımlı bir komut satırı eylemi var mı? Kütüphaneyi göstermeyi, Finder kullanarak Takma ad oluşturmayı ve yeniden ısıtmayı içeren çözümlerden kaçınmak istiyorum. Bunu nasıl yapacağımı biliyorum, ama amacım için Terminal'e yapıştırılabilen ve onunla yapılabilecek tek bir satır tercih edilir.

Yanıtlar:


10

Bunu Terminal'de deneyin:

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

5
Sanırım demek istedin ln -s ~/Library/path/to/folder folder. Bu yöntemin küçük bir dezavantajı (yani syinkinking), "orijinal" (yani hedef) taşınır veya yeniden adlandırılırsa bağlantının kopmasıdır.
Kelvin

2
İkinci argüman foldergerekli değildir. Bunu atlarsanız ln, orijinal klasörle aynı adlı bir bağlantı oluşturur.
Boj

Ah, haklısın. Daha önce bir hata aldım, ama bir şeyleri yanlış yazmış olmalıydım.
Kelvin

1
Ne olduğunu biliyorum - sondaki eğik çizginiz olamaz!
Kelvin

12
OSX takma adları sembolik bağlantılar değildir . Bkz. Stackoverflow.com/questions/11165799/…
bfontaine

13

Terminalin bir hattında bunu yapmak mümkündür. Diyelim ki "/Users/me/Library/Preferences/org.herf.Flux.plist" dosyasına takma ad vermek istiyorsunuz.

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'

Bir klasörünüz varsa to fileile değiştirmelisiniz to folder.

Takma ad oluşturmak için bir dosya veya klasör yoluna geçmenize izin veren bir kabuk komut dosyası şunlardır:

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

Bu komut dosyasını isim ise make-alias.sh, chmod u+x make-alias.shve onu koymak /usr/local/bin, sen mesela çalıştırabilirsiniz make-alias.sh ~/Library/Preferences.


Çalışacak ~/Library/Preferences/org.herf.Flux.plist"mı yoksa kullanıcı adının Terminal komutuna açıkça dahil edilmesi gerekiyor mu?
LessPop_MoreFizz

Sadece kullanmayı denedim ~ve tek satır osascriptkomutuyla çalışmıyor . Bunun yerine komut dosyası kullanmanızı öneririm, çünkü ~otomatik olarak dönüştürülür.
Kelvin

Hmm. Gibi boşluklar ile dosya adlarını kırmak gibi görünüyor/Library/Application Support/
LessPop_MoreFizz 20:12

Eğer bash betiğini kullanıyorsanız, boşluk veya özel karakterler varsa dosya adını tek tırnak içine almalısınız. Ancak bu, ~genişlemesini engelleyecektir . En iyi şey tırnak işareti kullanmak değil ve bash özel karakterleri düzgün bir şekilde "kaçacak" böylece dosya adını tamamlamak için sekme. Örneğin ~/Library/Applicationsekmeye basın. Application SupportTek eşleşme olsaydı , merminin boşluktan önce ters eğik çizgi eklemesi gerekirdi. Kaçmak için el ile ters eğik çizgi de kullanabilirsiniz.
Kelvin

Boşlukların / özel karakter sorunlarının herhangi bir çözümde mevcut olacağını unutmayın - kabuk 2 ayrı parametre yerine 1 parametre geçmek istediğinizi bilemez.
Kelvin

1

Eğer kullanabilirsiniz, belirli bir klasör bağlantısını hedeflemek (veya ona belirli bir isim vermek) gerekir set name of result to "…"gibi

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

Betiğin nasıl çalıştığına dair bir açıklama yararlı olacaktır
user151019

Yukarıdaki komut dosyasıyla aynı, ancak realpath'e ihtiyaç duymadan
Andrew McClure

0

Bir python çözümü isteyen insanlar için, işte applecript'i saran ve daha sonra subprocess.call öğesini çağıran bir fonksiyon:

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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.