Có macOS tương đương với lệnh PGS của Windows không?


3

Tôi đang tìm cách thay đổi liên kết tệp trên Mac bằng cách sử dụng một số loại tập lệnh. Tôi biết rằng tôi có thể làm một cái gì đó như thế trong Windows bằng cách sử dụng assoc chỉ huy.

Có một cái gì đó có thể script được trên macOS sẽ làm một công việc tương tự? Tôi không quan tâm đến việc nó có hay không trong Bash (sở thích của tôi), AppleScript hay thứ gì đó trong Automator.

Tôi nhận thức được dutil lệnh nhưng tôi muốn có thể làm điều đó mà không cần phần mềm bổ sung.

Câu trả lời:


3

Do hệ thống macOS sử dụng cơ sở dữ liệu và tiện ích Launch Services để ánh xạ các loại tệp và thứ hai, phần mở rộng tệp cho các ứng dụng mở chúng, tương tự gần nhất với assoc sẽ là lsregister

Nó bị chôn vùi bên trong thư mục hệ thống, Core Services, khung chứa LaunchService.

Có hàng tấn tốt câu hỏi và câu trả lời ở đây một khi bạn biết tiện ích để tìm kiếm thì có hàng tấn bài viết blog tuyệt vời , hướng dẫn phát triển tài liệu chính thức .

Vì tôi có / usr / local / bin trong đường dẫn của mình, tôi thường sym liên kết nó ở đó để tôi có thể lưu trữ loại:

mac:~ me$ ln -s /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister  /usr/local/bin
mac:~ me$ lsregister
lsregister: [OPTIONS] [ <path>... ]
                      [ -apps <domain>[,domain]... ]
                      [ -libs <domain>[,domain]... ]
                      [ -all  <domain>[,domain]... ]

Paths are searched for applications to register with the Launch Service database.
Valid domains are "system", "local", "network" and "user". Domains can also
be specified using only the first letter.

  -kill     Reset the Launch Services database before doing anything else
  -seed     If database isn't seeded, scan default locations for applications and libraries to register
  -lint     Print information about plist errors while registering bundles
  -lazy n   Sleep for n seconds before registering/scanning
  -r        Recursive directory scan, do not recurse into packages or invisible directories
  -R        Recursive directory scan, descending into packages and invisible directories
  -f        force-update registration even if mod date is unchanged
  -u        unregister instead of register
  -v        Display progress information
  -gc       Garbage collect old data and compact the database
  -dump     Display full database contents after registration
  -h        Display this help

3

Thay đổi liên kết tệp cho một tệp hoặc một tập hợp tệp (AppleScript)

Tập lệnh này trước tiên chứng minh rằng ứng dụng mặc định cho một số tệp văn bản trên hệ thống của tôi đã được đặt thành Chỉnh sửa văn bản . Sau đó, nó thay đổi liên kết tệp cho tệp cụ thể đó để bây giờ nó mở bằng Nguyên tử . Cuối cùng, nó liên kết tất cả các tệp văn bản trên màn hình nền với Nguyên tử ứng dụng.

tell application "System Events"
    get the default application of the file "/path/to/some file.txt"
        --> alias "Macintosh HD:Applications:TextEdit.app:" of application "System Events"

    # Individual file:
    set the default application of the file "/path/to/some file.txt" to ¬
        the path to the application named "Atom"

    # A set of files:
    set the default application of every file of the desktop folder whose ¬
        name extension = "txt" to the path to the application "Atom"
end tell

Thay đổi liên kết tệp cho tất cả các tệp thuộc loại đã cho (JXA)

Sử dụng JavaScript để tự động hóa, bạn có thể triển khai các chức năng Core Foundation theo cách bạn không thể làm với AppleScriptObjC, để tương tác với Dịch vụ ra mắt ở cấp hệ thống và thay đổi liên kết tệp cho một loại tệp nhất định.

Ở đây, tôi đã nhắm mục tiêu các tệp văn bản đơn giản (những tệp này có phần mở rộng .txt theo mặc định) và chuyển ứng dụng mặc định trả lời chúng sang Nguyên tử :

ObjC.import('CoreServices');

var contentType = 'public.plain-text';
var bundleID = Application('Atom').id();

$.LSSetDefaultRoleHandlerForContentType(
            contentType, 
            $.kLSRolesAll, 
            bundleID
        );

Loại tệp phải được nhắm mục tiêu theo cách Định danh loại thống nhất . Đây là các chuỗi văn bản đặc biệt xác định duy nhất một lớp hoặc loại mục nhất định. Liên kết sẽ đưa bạn đến một trang liệt kê các UTI được khai báo hệ thống của Apple cho tất cả các loại tệp có khả năng bạn sẽ quan tâm. Cấu trúc trong một loại cây thừa kế. Vì vậy, tôi có thể lười biếng chọn ra public.text, mà tôi đã thấy đầu tiên trong danh sách, cho đến khi đọc thêm, chúng ta biết rằng UTI này là một loại cơ sở cho tất cả các văn bản, bao gồm HTMLRTF các tập tin.


1
Đóng đinh nó cho câu hỏi thực tế đã được hỏi - làm thế nào để tôi thay đổi mọi thứ. Giải pháp tuyệt vời và dạy rất nhiều là tốt.
bmike
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.