เปลี่ยนการเชื่อมโยงไฟล์ในเทอร์มินัล?


18

มีวิธีการเชื่อมโยงประเภทไฟล์กับแอปพลิเคชันผ่านทางเทอร์มินัลหรือไม่ ฉันคิดว่า ~ / Library / Preferences / com.apple.launchservices.plist อาจทำเช่นนั้นและฉันก็เคยเห็น: เหตุใดบรรทัดคำสั่งจึงเปลี่ยนเป็น ~ / Library / Preferences / com.apple.LaunchServices.plist ไม่ได้ผลทันที? แต่ฉันไม่สามารถทำงานได้

ฉันเดาว่าฉันกำลังมองหาวิธีที่จะเลียนแบบสิ่งที่ GUI ทำเมื่อมีคนใช้เพื่อเปลี่ยนประเภทการเชื่อมโยงดูเหมือนว่าจะทำงานได้ทันทีที่นั่น ...

คำตอบ:


8

คุณสามารถแก้ไข~/Library/Preferences/com.apple.LaunchServices.plistในโปรแกรมแก้ไขข้อความหลังจากแปลงเป็น XML:

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

จากนั้นเพิ่มรายการเช่นนี้ในLSHandlersอาร์เรย์:

<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>

คุณสามารถใช้mdlsเพื่อดู UTIs ประเภทไฟล์และสิ่งที่ต้องการosascript -e 'id of app "AppName"'ดูตัวระบุบันเดิลของแอปพลิเคชัน

คุณสามารถใช้การเปลี่ยนแปลงกับการcom.apple.LaunchServices.plistรีสตาร์ท การออกจากระบบและกลับเข้ามาไม่เพียงพอ


หมายเหตุ : dutiไม่ได้อยู่ในการพัฒนาที่ใช้งานได้อีกต่อไปและได้รับการกำกับดูแลโดยผู้ดูแลว่า "ไม่สนับสนุน" โครงการไม่ได้เห็นความคืบหน้าสำคัญใด ๆ ตั้งแต่ปี 2555 นอกเหนือจากการอัพเดทการกำหนดค่า มันย้ายจาก Sourceforge ไปยัง Github คำตอบนี้ได้รับการอัพเดทเพื่อรวมลิงค์ใหม่

ฉันยังใช้dutiด้วย ฉันได้บันทึกไฟล์เช่นนี้ (มีประมาณ 100 บรรทัด) เป็น~/.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

ฉันมีตัวแทนเรียกใช้ที่ทำงานduti ~/.dutiโดยอัตโนมัติเมื่อ~/.dutiมีการเปลี่ยนแปลง

โดยปกติคุณสามารถใช้นามสกุลไฟล์ (เช่น.jpg) แทน UTIs (เช่นpublic.jpg) เพื่อระบุประเภทไฟล์ dutiแปลงส่วนขยายเป็น UTIs ที่ใช้กับส่วนขยายอื่น ๆ (เช่น.jpeg) สำหรับส่วนขยายบางอย่างเช่น.mkvและ.texUTI ขึ้นอยู่กับแอปพลิเคชันที่ลงทะเบียนส่วนขยายก่อน

รุ่นล่าสุดของdutiเพียง แต่มีรหัสที่มา แต่1.5.0นอกจากนี้ยังมีการติดตั้ง


5

ตรวจสอบduti :

duti เป็นเครื่องมือบรรทัดคำสั่งที่เขียนโดย Andrew Mortensen ออกแบบมาเพื่อตั้งค่าแอปพลิเคชันเริ่มต้นสำหรับประเภทเอกสารและแบบแผน URL บน Mac OS X

ประเภทเอกสารบน Mac OS X ถูกกำหนดโดยสิ่งที่ Apple เรียกใช้ Uniform Type Identifier หรือ UTIs ตัวอย่างเช่นไฟล์ HTML มี UTI เป็น public.html เอกสาร Microsoft Word ได้รับการอธิบายโดย UTI com.microsoft.word.doc Apple ให้บริการ UTIs จำนวนมากกับ Mac OS X แต่ผู้พัฒนามีอิสระที่จะกำหนดได้เองตราบใดที่ UTI นั้นไม่ซ้ำกับประเภทเอกสารนั้น

ชื่อของ duti หมายถึง "default สำหรับ UTI"


2
ข้อเสนอแนะบังคับ: ใช้brew install dutiในการติดตั้งduti
ท่าเรือเปาโลรามอน

1

นี่คือเอเจนต์ launchd สำหรับ duti ที่จะทำเคล็ดลับ:

<?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>

เห็นได้ชัดว่าแทนที่joshgummersallด้วยชื่อผู้ใช้ของคุณเอง ฉันวางไฟล์นี้ที่~/Library/LaunchAgents/duti.plist, chmmodd 644 และวิ่ง:

$ launchctl load -F -w ~/Library/LaunchAgents/duti.plist

0

คำตอบสั้น ๆ : การเชื่อมโยงแอปพลิเคชันของไฟล์จะถูกเก็บไว้ในตัวแยกทรัพยากรของไฟล์และ Apple จัดให้มีสองยูทิลิตี้ ( RezและDeRez ) ซึ่งอนุญาตให้ใช้การจัดการกับส้อมทรัพยากรได้

สำหรับรายละเอียดเพิ่มเติมคำถามนี้ได้รับคำตอบอย่างละเอียดที่ Super User:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.