Mac OSX thay đổi liên kết tệp trên mỗi tệp trên dòng lệnh


10

Tôi cần thay đổi hàng loạt ứng dụng được liên kết với các tệp nhất định thông qua dòng lệnh. Tôi không thay đổi liên kết tệp cho một phần mở rộng tệp nhất định, tôi thực sự đang tìm cách nhắm mục tiêu các tệp cụ thể để mở trong một ứng dụng khác với liên kết mặc định cho loại tệp đó. Tôi không muốn thay đổi toàn bộ ứng dụng mặc định cho phần mở rộng tệp này, chỉ cho các tệp cụ thể mà tôi nhắm mục tiêu.

Ngay bây giờ, tôi đang chọn tất cả các tệp tôi muốn thay đổi trong công cụ tìm, nhấn tùy chọn + lệnh + i để mở lấy thông tin cho nhiều tệp và thay đổi ứng dụng cho các tệp đó. Thật là khó chịu.

Câu trả lời:


6

Thông tin này được lưu trữ trong ngã ba tài nguyên của tệp ( Wikipedia ). Các nhánh tài nguyên này được hiển thị dưới dạng các thuộc tính mở rộng ( 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 

Chỉnh sửa từ đầu có lẽ khá đau đớn - rất nhiều dữ liệu nhị phân:

$ 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

Nhưng bạn có thể coi các nhánh tài nguyên này như các tập tin. Ví dụ:

$ 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 là cách fork tài nguyên được tiếp xúc với các ứng dụng POSIX (có thể là mọi thứ bạn làm trong Terminal).

Vì vậy, bạn chỉ cần tạo một tệp "mẫu" từ một ngã ba tài nguyên hiện có (trong ví dụ này openInSublime2rsrc) và bạn có thể sao chép nó vào các tệp khác của mình sau đó.


1
Giải pháp này hoạt động cho đến khi Lion. Sao chép vào tập tin / rsrc cho tôi lỗi ": Không phải thư mục". Quay lại quảng trường một :(
Rob

1
@Rob Hãy thử sử dụng somefile.txt/..namedfork/rsrcthay thế. somefile.txt/rsrcđã bị phản đối một thời gian trước đây.
Daniel Beck

Daniel Beck - bạn là một phao cứu sinh, cảm ơn bạn rất nhiều.
Cướp

Bạn không cần phải chỉnh sửa trực tiếp các tài nguyên - xem câu trả lời của tôi bên dưới, nhưng tóm tắt là bạn có thể sử dụng các tiện ích có tên Rez và DeRez để chỉnh sửa các tài nguyên. Vì đây là những công cụ dành cho nhà phát triển được hỗ trợ, bạn sẽ ít gặp sự cố hơn.
mauvedeity

5

Chọn từ câu trả lời của Daniel Beck ở trên, thông tin này thực sự được lưu trữ trong tài nguyên của tập tin. Apple cung cấp hai tiện ích, được gọi là "Rez" và "DeRez" với các công cụ dành cho nhà phát triển, cho phép bạn thao tác các nhánh tài nguyên. Cụ thể, bạn có thể đẩy một ngã ba tài nguyên vào một tệp với Rez.

Để thay đổi liên kết của một tệp từ dòng lệnh, trước tiên hãy tạo một tệp đúng loại và thay đổi thủ công liên kết của nó với ứng dụng bạn muốn mở. Điều này tạo ra ngã ba tài nguyên trong tệp - nếu bạn không ' Làm điều này, sẽ không có thông tin để sao chép. Sau đó, rút ​​ra ngã ba tài nguyên với DeRez, như thế này (giả sử một tệp foo.txt và ứng dụng bạn muốn sử dụng là Firefox.app).

DeRez foo.txt > foo.r

Điều này sẽ tạo ra một tệp có tên foo.r là ngã ba tài nguyên được dịch ngược dưới dạng tệp văn bản. Nó sẽ trông giống như thế này:

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"            /* ................ */

Bạn có thể chỉnh sửa điều này nếu bạn muốn tạo một cái từ đầu, nhưng bạn phải có định dạng chính xác hoặc nó sẽ không hoạt động. Đó chỉ là các ký tự được mã hóa bằng hex mô tả đường dẫn đến gói ứng dụng bạn muốn, kết thúc bằng số không.

Bạn có thể thấy một thông báo nói rằng ngã ba tài nguyên trống và chưa được khởi tạo. Nếu vậy, bạn đã không thay đổi liên kết trên mỗi tệp trên tệp nguồn, vì vậy bạn cần phải thực hiện điều đó, sau đó chạy lại lệnh DeRez.

Khi bạn đã có thứ này, bạn có thể đẩy tệp này vào một tệp khác như sau (giả sử bar.txt tồn tại):

Rez foo.r -a -o bar.txt

Điều này cập nhật bar.txt tại chỗ với ngã ba tài nguyên từ foo.r.

Để kiểm tra nó hoạt động tốt, vì cả Rez và DeRez đều không in các thông báo lỗi, chỉ cần làm điều này:

DeRez bar.txt

Bạn sẽ thấy thông tin tương tự như trước đây. Sau tất cả, chỉ cần mở tệp bar.txt như bình thường và nó sẽ mở trong ứng dụng chính xác, không phải tệp mặc định.

Để thực hiện thay đổi hàng loạt, khi bạn có tệp .r, thì bạn có thể sử dụng bản mở rộng ký tự đại diện tiêu chuẩn như sau:

Rez foo.r -a -o *.txt

Điều đó sẽ làm tất cả các tệp phù hợp với ký tự đại diện.

Tôi đã thực hiện điều này vào ngày 10.7, nhưng tôi hiểu rằng nó cũng hoạt động trên các máy trước đó.


Thông tin thú vị về các công cụ này. Tuy nhiên, có vẻ như các công cụ này không làm gì mà việc truy cập ..namedfork/rsrccũng không làm được, đúng không? Bạn giao dịch đòi hỏi kiến ​​thức về (bán) nội bộ để có kiến ​​thức về các công cụ cụ thể - Tôi không tin điều này tốt hơn.
Daniel Beck

@DanielBeck Bạn đúng, theo như tôi biết. Tuy nhiên, như đã nói, thông tin nội bộ đã thay đổi với Lion, trong khi đây là những công cụ phát triển ổn định nên không phụ thuộc vào phiên bản. Cá nhân, tôi nghĩ rằng các công cụ nội bộ là thú vị, nhưng các công cụ có nhiều khả năng hoạt động đa nền tảng và tôi muốn sử dụng các công cụ được hỗ trợ.
mauvedeity


1

Bạn nói rằng bạn muốn "thay đổi hàng loạt" ứng dụng được liên kết với một tập tin (phụ) đã cho, thuộc một loại nhất định. thiết lập phụ vì bạn không muốn thay đổi tất cả các phiên bản của loại tệp đó sang ứng dụng mới đó.

Tuy nhiên, không có cách dễ dàng để làm điều này. Cách thức LaunchService tìm ra ứng dụng nào sẽ được yêu cầu để mở tệp là một quy trình nhiều tầng và phụ thuộc vào cài đặt với các phạm vi khác nhau (người dùng, hệ thống, v.v.).

Nhưng - bạn có thể sử dụng opentrên dòng lệnh và bảo nó sử dụng một ứng dụng cụ thể lần này. Điều này sẽ không thay đổi bất kỳ liên kết nào, nhưng nó sẽ đạt được những gì bạn nói, cụ thể là mở một tập hợp các tệp trong một ứng dụng cụ thể:

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

giống

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

và, hoàn toàn rời khỏi dòng lệnh: hãy xem tiện ích này: http://michelf.com/software/magic-launch/


Trong ví dụ cụ thể của bạn, open -a TextWrangler *sẽ còn nhanh hơn.
Daniel Beck

đúng, nhưng điều đó sẽ thêm lớp mở rộng ký tự đại diện vào phần giải thích, điều này sẽ khiến cho ví dụ trở nên dễ hiểu hơn :-) không tệ cho việc mở, nhưng có những công cụ khác chỉ mời các vấn đề về ký tự đại diện ...
Florenz Kley
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.