Mac OSX เปลี่ยนการเชื่อมโยงไฟล์ต่อไฟล์ในบรรทัดคำสั่ง


10

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

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

คำตอบ:


6

ข้อมูลนี้ถูกเก็บไว้ในตัวแยกทรัพยากรของไฟล์( Wikipedia ) ส้อมทรัพยากรเหล่านี้ถูกเปิดเผยเป็นคุณลักษณะเพิ่มเติม ( Wikipedia ):

$ ls -l@ somefile.txt 
-rw-r--r--  1 danielbeck  staff  0 18 Mär 19:00 somefile.txt

# setting non-default application using Finder

$ ls -l@ somefile.txt 
-rw-r--r--@ 1 danielbeck  staff  0 18 Mär 19:01 somefile.txt
        com.apple.ResourceFork  1338 

การแก้ไขตั้งแต่เริ่มต้นอาจเป็นเรื่องที่เจ็บปวดมาก - ข้อมูลไบนารีจำนวนมาก:

$ xattr -p com.apple.ResourceFork somefile.txt 
00 00 01 00 00 00 05 08 00 00 04 08 00 00 00 32
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 04 04 00 00 00 32 2F 55 73 65 72 73 2F 64
61 6E 69 65 6C 62 65 63 6B 2F 41 70 70 6C 69 63
61 74 69 6F 6E 73 2F 53 75 62 6C 69 6D 65 20 54
65 78 74 20 32 2E 61 70 70 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 01 00 00 00 05 08
00 00 04 08 00 00 00 32 0C 00 00 00 C0 05 00 00
00 1C 00 32 00 00 75 73 72 6F 00 00 00 0A 00 00
FF FF 00 00 00 00 19 00 00 00

แต่คุณสามารถจัดการกับส้อมทรัพยากรเหล่านี้เช่นไฟล์ ตัวอย่างเช่น:

$ open somefile.txt # opens in Sublime 2
$ cp somefile.txt/..namedfork/rsrc openInSublime2rsrc
$ open otherfile.txt # opens in TextEdit
$ cp openInSublime2rsrc otherfile.txt/..namedfork/rsrc
$ open otherfile.txt # opens in Sublime 2

/..namedfork/rsrc เป็นวิธีที่ตัวแยกทรัพยากรสัมผัสกับแอปพลิเคชัน POSIX (เช่นอาจเป็นทุกอย่างที่คุณทำในเทอร์มินัล)

ดังนั้นคุณต้องสร้างไฟล์ "เทมเพลต" หนึ่งไฟล์จากตัวแยกทรัพยากรที่มีอยู่ (ในตัวอย่างนี้openInSublime2rsrc) และคุณสามารถคัดลอกไปยังไฟล์อื่น ๆ ของคุณได้ในภายหลัง


1
วิธีนี้ใช้ได้ผลจนถึง Lion การคัดลอกไปยังไฟล์ / rsrc ทำให้ฉันมีข้อผิดพลาด ": ไม่ใช่ไดเรกทอรี" กลับไปที่ตารางที่หนึ่ง :(
Rob

1
@Rob ลองใช้somefile.txt/..namedfork/rsrcแทน somefile.txt/rsrcเลิกใช้แล้วในขณะที่ผ่านมา
Daniel Beck

Daniel Beck- คุณเป็นผู้ช่วยชีวิตขอบคุณมาก
Rob

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

5

รับจากคำตอบของ Daniel Beck ด้านบนข้อมูลนี้จะถูกเก็บไว้ในตัวแยกทรัพยากรของไฟล์ Apple มีเครื่องมือสองตัวที่เรียกว่า "Rez" และ "DeRez" พร้อมด้วยเครื่องมือสำหรับนักพัฒนาซึ่งช่วยให้คุณสามารถจัดการกับส้อมทรัพยากร โดยเฉพาะอย่างยิ่งคุณสามารถพุชตัวแยกทรัพยากรลงในไฟล์ด้วย Rez

หากต้องการเปลี่ยนการเชื่อมโยงของไฟล์เดียวจากบรรทัดคำสั่งขั้นแรกให้สร้างไฟล์ประเภทที่ถูกต้องและเปลี่ยนการเชื่อมโยงเป็นแอปพลิเคชันที่คุณต้องการเปิดด้วยตนเองซึ่งจะสร้างตัวแยกทรัพยากรในไฟล์ - หากคุณไม่ได้ ' อย่าทำเช่นนี้จะไม่มีข้อมูลที่จะคัดลอก จากนั้นดึงตัวแยกทรัพยากรออกด้วย DeRez เช่นนี้ (สมมติว่าไฟล์ foo.txt และแอปพลิเคชันที่คุณต้องการใช้คือ Firefox.app)

DeRez foo.txt > foo.r

สิ่งนี้จะสร้างไฟล์ชื่อ foo.r ซึ่งเป็นตัวแยกทรัพยากรที่ถอดรหัสแล้วเป็นไฟล์ข้อความ มันจะมีลักษณะดังนี้:

data 'usro' (0) {
    $"0000 001A 2F41 7070 6C69 6361 7469 6F6E"            /* ..../Application */
    $"732F 4669 7265 666F 782E 6170 7000 0000"            /* s/Firefox.app... */
    $"0000 0000 0000 0000 0000 0000 0000 0000"            /* ................ */

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

คุณอาจเห็นข้อความแจ้งว่าตัวแยกทรัพยากรว่างเปล่าและไม่เตรียมการ ถ้าเป็นเช่นนั้นคุณยังไม่ได้เปลี่ยนความสัมพันธ์ต่อไฟล์ในไฟล์ต้นฉบับดังนั้นคุณต้องดำเนินการดังกล่าวจากนั้นจึงรันคำสั่ง DeRez อีกครั้ง

เมื่อคุณมีสิ่งนี้แล้วคุณสามารถผลักไฟล์นี้ให้เป็นไฟล์อื่นได้ดังนี้ (สมมติว่ามี bar.txt อยู่):

Rez foo.r -a -o bar.txt

อัปเดต bar.txt นี้โดยใช้ตัวแยกทรัพยากรจาก foo.r

หากต้องการตรวจสอบว่าทำงานได้ดีเนื่องจากไม่มีข้อความแสดงข้อผิดพลาดของ Rez หรือ DeRez เพียงทำสิ่งนี้:

DeRez bar.txt

คุณควรเห็นข้อมูลเหมือนเดิม หลังจากนั้นเพียงเปิดไฟล์ bar.txt ตามปกติและควรเปิดในแอปพลิเคชันที่ถูกต้องไม่ใช่ค่าเริ่มต้น

หากต้องการเปลี่ยนแบตช์เมื่อคุณมีไฟล์. r จากนั้นคุณสามารถใช้การแทนที่ไวด์การ์ดมาตรฐานดังนี้:

Rez foo.r -a -o *.txt

นั่นจะทำไฟล์ทั้งหมดที่ตรงกับไวด์การ์ด

ฉันทำสิ่งนี้ในวันที่ 10.7 แต่ฉันเข้าใจว่ามันใช้ได้กับเครื่องรุ่นก่อนหน้าด้วย


ข้อมูลที่น่าสนใจเกี่ยวกับเครื่องมือเหล่านี้ ถึงกระนั้นดูเหมือนว่าเครื่องมือเหล่านี้จะไม่ทำสิ่งใดที่การเข้าถึง..namedfork/rsrcไม่ได้ทำเช่นนั้นถูกต้องหรือไม่ คุณแลกเปลี่ยนความรู้เกี่ยวกับ internals (กึ่ง) สำหรับความรู้เกี่ยวกับเครื่องมือเฉพาะ - ฉันไม่เชื่อว่านี่จะดีกว่า
Daniel Beck

@DanielBeck คุณถูกต้องเท่าที่ฉันรู้ อย่างไรก็ตามดังที่ได้กล่าวไว้ข้างต้นข้อมูลภายในเปลี่ยนไปเป็น Lion ในขณะที่เครื่องมือเหล่านี้เป็นเครื่องมือพัฒนาที่เสถียรซึ่งควรเป็นเวอร์ชั่นอิสระ โดยส่วนตัวแล้วฉันคิดว่าสิ่งต่าง ๆ ภายในนั้นน่าสนใจ แต่เครื่องมือมีแนวโน้มที่จะทำงานข้ามแพลตฟอร์มได้มากกว่าและฉันควรใช้เครื่องมือที่รองรับ
mauvedeity


1

คุณบอกว่าคุณต้องการ "แบทช์เปลี่ยน" แอปพลิเคชันที่เกี่ยวข้องกับชุดของไฟล์ที่กำหนด (ย่อย) ที่กำหนด ชุดย่อยเนื่องจากคุณไม่ต้องการเปลี่ยนอินสแตนซ์ทั้งหมดของประเภทไฟล์นั้นเป็นแอปพลิเคชันใหม่นั้น

อย่างไรก็ตามไม่มีวิธีง่ายๆในการทำเช่นนี้ วิธีที่ LaunchServices ค้นหาแอปพลิเคชันที่ควรบอกให้เปิดไฟล์เป็นกระบวนการหลายขั้นตอนและขึ้นอยู่กับการตั้งค่าที่มีขอบเขตที่แตกต่างกัน (ผู้ใช้ระบบและอื่น ๆ )

แต่ - คุณสามารถใช้openบน commandline และบอกให้ใช้แอพที่เฉพาะเจาะจงในครั้งนี้ สิ่งนี้จะไม่เปลี่ยนแปลงการเชื่อมโยงใด ๆ แต่มันจะบรรลุสิ่งที่คุณพูดว่าคุณต้องการกล่าวคือเปิดชุดไฟล์ในแอปพลิเคชันเฉพาะ:

open -a <appbundle> <somefile> <anotherfile>

ชอบ

shiny:t fl$ ls -l
total 1848
-rwxr-xr-x  1 fl  staff    1795 Mar 18 20:03 distribution.pl
-rw-r--r--  1 fl  staff  939264 Mar 18 20:03 objectreport.txt
shiny:t fl$ open -a TextWrangler distribution.pl objectreport.txt

และออกไปจากบรรทัดคำสั่งโดยสิ้นเชิง: ดูยูทิลิตี้นี้: http://michelf.com/software/magic-launch/


ในตัวอย่างเฉพาะของคุณopen -a TextWrangler *จะเร็วขึ้นกว่าเดิม
Daniel Beck

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