เป็นไปได้หรือไม่ที่จะสอบถามฐานข้อมูลบริการเรียกใช้งานสำหรับแอปพลิเคชันที่จะเปิดไฟล์โดยพลการหรือประเภท UTI?


11

ฉันสามารถใช้ mdls เพื่อแสดงUniform Type Identifier (UTI) สำหรับไฟล์โดยพลการเช่นเดียวกับลำดับชั้นของประเภทที่เป็น supersets ของ UTI ที่เฉพาะเจาะจง

mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.ksh
kMDItemContentType     = "public.ksh-script"
kMDItemContentTypeTree = (
    "public.ksh-script",
    "public.shell-script",
    "public.script",
    "public.source-code",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)
mac:~ mike$ mdls -name kMDItemContentType -name kMDItemContentTypeTree foo.command
kMDItemContentType     = "com.apple.terminal.shell-script"
kMDItemContentTypeTree = (
    "com.apple.terminal.shell-script",
    "public.shell-script",
    "public.script",
    "public.source-code",
    "public.plain-text",
    "public.text",
    "public.data",
    "public.item",
    "public.content"
)

มีเครื่องมือใดบ้างที่สามารถแสดงว่าแอพใดที่ลงทะเบียนไว้สำหรับ UTI เฉพาะนอกเหนือจากการทดลองใช้และข้อผิดพลาด

ชัดเจนจากการตรวจสอบว่าfoo.commandไฟล์จะเปิดโดย Terminal.app แต่ก็ไม่ชัดเจนว่า foo.ksh ปัจจุบันเป็นของ TextEdit.app

ฉันต้องการอ่านฐานข้อมูลบริการเปิดตัว Mac OS X ได้โดยตรงโดยไม่ต้องใช้openเพื่อดูว่าแอปใดถูกเลือกตาม UTI พื้นฐาน มันเหมือนมี--preview --verboseสวิตช์เปิดให้บอกฉันว่าจะทำอะไรดีกว่าทำ

ยิ่งไปกว่านั้นจะเป็นวิธีการแสดงรายการแอพทั้งหมดที่สามารถเปิด UTI นั้นได้แม้ว่าจะไม่ใช่แอพที่ต้องการ

ในการรับข้อมูลทุติยภูมินี้ฉันต้องสร้างหรือค้นหาไฟล์สำหรับความสนใจแต่ละประเภทและใช้ Finder เพื่อแสดงว่าแอปใดสามารถเปิด UTI นั้นด้วยตนเอง

ป้อนคำอธิบายรูปภาพที่นี่

ฉันต้องการเข้าถึงข้อมูลนี้โดยทางโปรแกรมจาก terminal


ความสมบูรณ์ของ zsh นั้นน่าสนใจ แต่ฉันไม่เห็นวิธีที่จะทำให้มันเป็น stdout ฉันจะตรวจสอบซอร์สโค้ดของ AppApplications และดูว่าไบนารีนั้นทำงานกับ Lion ได้หรือไม่ มันเป็นคู่ที่ยอดเยี่ยม - ขอบคุณ!
bmike

คำตอบ:


6

Andrew Mortensen's dutiเป็น CLI ที่จะแสดงรายการตัวจัดการ UTI:

  • -d <uti> แสดงรายการตัวจัดการเริ่มต้น
  • -l <uti> แสดงรายการตัวจัดการที่ลงทะเบียนทั้งหมด

ดูหน้าคนสำหรับ Duti

แก้ไข: Lri ชี้ให้เห็นในคำตอบนี้ duti ดูเหมือนจะไม่แสดงรายการแอปพลิเคชันที่เป็นไปได้ทั้งหมด (อาจเป็นเพราะมันไม่ได้คำนึงถึงมรดกของ UTI? วิธีแก้ปัญหาที่แนะนำของเขาแน่นอนว่าAllApllicationsจะเป็นคำตอบที่ดีกว่า


มันหายไปบางแอพที่จะแสดงในเปิดด้วยเมนูแม้ว่า
Lri

แปลกมาก. คุณสามารถบอกฉันว่ามันหายไปไหน?
kopischke

ฉันแก้ไขคำตอบของฉันในคำถามอื่นเพื่อรวมเอาท์พุทตัวอย่างจาก duti
Lri

ในขณะที่ duti เขียนไว้อย่างดีตอนนี้ก็ใช้ API ที่เลิกใช้แล้ว ฉันแนะนำให้ดูที่developer.apple.com/library/prerelease/mac/documentation/Carbon/…
Mugen

ตกลง - การติดตั้งสิ่งนี้โดย homebrew ทำให้เกิดการรันในบ้าน ขอบคุณมาก!
bmike

11

คุณสามารถใช้คำสั่งนี้เพื่อตรวจสอบฐานข้อมูลการเปิดตัวบริการ อ็อพชัน -dump ให้ฐานข้อมูลทั้งหมดแก่คุณจากนั้นคุณสามารถไพพ์นี้เป็น grep และค้นหาสิ่งที่คุณต้องการ

/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep -n7 'your search string'


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