Ubah asosiasi file di terminal?

18

Apakah ada metode untuk mengaitkan jenis file dengan aplikasi melalui terminal? Saya pikir ~ / Library / Preferences / com.apple.launchservices.plist mungkin melakukannya, dan saya juga telah melihat: Mengapa baris perintah berubah menjadi ~ / Library / Preferences / com.apple.LaunchServices.plist tidak segera efektif? tapi sepertinya saya tidak bisa membuatnya bekerja.

Saya kira saya sedang mencari cara untuk meniru apa yang GUI lakukan ketika seseorang menggunakannya untuk mengubah tipe asosiasi, sepertinya berfungsi langsung di sana ...

knishka
sumber

Jawaban:

8

Anda dapat mengedit ~/Library/Preferences/com.apple.LaunchServices.plistdalam editor teks setelah mengubahnya menjadi XML:

plutil -convert xml1 ~/Library/Preferences/com.apple.LaunchServices.plist

Kemudian tambahkan entri seperti ini ke LSHandlersarray:

<dict>
  <key>LSHandlerContentType</key>
  <string>com.adobe.pdf</string>
  <key>LSHandlerRoleAll</key>
  <string>net.sourceforge.skim-app.skim</string>
</dict>
<dict>
  <key>LSHandlerContentTag</key>
  <string>mkv</string>
  <key>LSHandlerContentTagClass</key>
  <string>public.filename-extension</string>
  <key>LSHandlerRoleAll</key>
  <string>org.videolan.vlc</string>
</dict>

Anda dapat menggunakan mdlsuntuk melihat UTI dari jenis file dan sesuatu seperti osascript -e 'id of app "AppName"'untuk melihat bundel pengidentifikasi aplikasi.

Anda dapat menerapkan perubahan com.apple.LaunchServices.plistdengan memulai ulang. Keluar dan kembali tidak cukup.


CATATAN : dutitidak lagi dalam pengembangan aktif dan telah diberi label oleh pengelolanya sebagai "tidak didukung". Proyek ini belum melihat kemajuan besar sejak 2012 selain dari pembaruan konfigurasi. Itu telah pindah dari Sourceforge ke Github. Jawaban ini telah diperbarui untuk menyertakan tautan baru.

Saya juga menggunakan duti . Saya telah menyimpan file seperti ini (dengan sekitar 100 baris) sebagai ~/.duti:

org.gnu.Emacs public.plain-text all # .txt, .text, plain text files without an extension
org.gnu.Emacs public.unix-executable all # executable scripts
com.SequentialX.Sequential .jpg all
org.videolan.vlc .mkv all

Saya memiliki agen launchd yang berjalan duti ~/.dutisecara otomatis ketika ~/.dutidiubah.

Anda biasanya dapat menggunakan ekstensi nama file (seperti .jpg) daripada UTI (suka public.jpg) untuk menentukan jenis file. dutimengonversi ekstensi menjadi ISK yang juga berlaku untuk ekstensi lain (seperti .jpeg). Untuk beberapa ekstensi seperti .mkvdan .tex, UTI tergantung pada aplikasi apa yang mendaftarkan ekstensi terlebih dahulu.

The Versi terbaru dari dutihanya mencakup kode sumber, tetapi 1.5.0 juga mencakup installer.

Lri
sumber
5

Lihat duti :

duti adalah alat baris perintah yang ditulis oleh Andrew Mortensen, yang dirancang untuk mengatur aplikasi default untuk jenis dokumen dan skema URL pada Mac OS X.

Jenis dokumen pada Mac OS X ditentukan oleh apa yang Apple sebut Uniform Type Identifiers, atau UTI. File HTML, misalnya, memiliki ISK dari public.html. Dokumen Microsoft Word dijelaskan oleh UTI com.microsoft.word.doc. Apple menyediakan banyak ISK dengan Mac OS X, tetapi pengembang bebas menentukan sendiri, selama ISK unik untuk jenis dokumen tersebut.

nama duti berarti "standar untuk ISK."

da4
sumber
2
Saran wajib: gunakan brew install dutiuntuk menginstalduti
Pier Paolo Ramon
1

Berikut adalah agen launchd untuk duti yang akan melakukan trik:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.duti.watcher</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/bin/duti</string>
      <string>/Users/joshgummersall/.duti</string>
    </array>
    <key>UserName</key>
    <string>joshgummersall</string>
    <key>KeepAlive</key>
    <false/>
    <key>WatchPaths</key>
    <array>
      <string>/Users/joshgummersall/.duti</string>
    </array>
  </dict>
</plist>

Jelas ganti joshgummersalldengan nama pengguna Anda sendiri. Saya menempatkan file ini di ~/Library/LaunchAgents/duti.plist, chmmodd ke 644 dan berlari:

$ launchctl load -F -w ~/Library/LaunchAgents/duti.plist
Josh Gummersall
sumber
0

Jawaban singkat: Asosiasi aplikasi file disimpan dalam garpu sumber daya file , dan Apple menyediakan dua utilitas ( Rez dan DeRez ) yang memungkinkan manipulasi garpu sumber daya., Tetapi ini bukan untuk orang yang lemah hati.

Untuk lebih jelasnya, pertanyaan ini dijawab dengan sangat teliti di Super User:

Nate
sumber