Làm cách nào để thực thi tập lệnh shell với các tập tin / thư mục được chọn trong công cụ tìm?


13

Tôi đến từ Linux, nơi dễ dàng chạy tập lệnh dựa trên tập hợp các tệp trong nautilus hoặc cá heo, nhưng tôi rất ngạc nhiên khi thấy rằng điều này không dễ trong OSX.

Tốt hơn là, tôi rất thích có thể nhấp ctrl vào một số lựa chọn trong công cụ tìm, chọn tập lệnh của tôi và có một cửa sổ đầu cuối bật lên để hiển thị tiến trình hoặc bất kỳ tương tác người dùng nào.

Câu trả lời:


8

Cách dễ nhất, tích hợp để thực hiện việc này là chỉ cần kéo các mục từ Finder vào cửa sổ Terminal . Khi bạn thả chúng, Terminal sẽ gõ loại tên đường thoát (thoát) của chúng. Sau đó, bạn có thể sử dụng chỉnh sửa dòng lệnh của shell để nhập phần còn lại của lệnh. Hoặc nếu bạn đang suy nghĩ trước, bạn có thể gõ lệnh trước sau đó kéo vào các mục.

Phiên bản đầu tiên của trò chơi kéo co:

  1. Chọn và kéo một số mục Finder vào cửa sổ Terminal đang hiển thị dấu nhắc shell. Terminal sẽ chèn tên đường dẫn (thoát).
  2. Loại Control+ A(đi đến đầu dòng; A là mặc định, nhưng thay đổi theo shell / cấu hình).
  3. Nhập lệnh của bạn và một khoảng trắng (nó sẽ được chèn trước tên đường dẫn).

Người suy nghĩ trước phiên bản trước:

  1. Theo thứ tự bất kỳ, làm cả hai:
    • Trong cửa sổ Terminal , nhập phần ban đầu của lệnh và khoảng trắng của bạn (mọi thứ trừ tên đường dẫn).
    • Chọn một số mục trong Finder .
  2. Kéo các mục đã chọn từ Finder vào cửa sổ Terminal nơi bạn đã nhập lệnh.
  3. Kích hoạt cửa sổ Terminal và nhấn Return.

Bạn có thể (như các câu trả lời khác đã chỉ ra) chuyển sang AppleScript hoặc Automator nếu bạn cần thêm một giải pháp tự động hơn. Do các bộ phận chuyển động thêm vào, nên có thể thêm một số phức tạp vào giải pháp, bạn sẽ phải cân nhắc lợi ích của quy trình trên (thủ công, nhưng linh hoạt) đối với sự phức tạp của việc thực hiện một hoặc nhiều giải pháp tự động.

Một số khả năng tự động hóa bao gồm:

  • một ứng dụng giọt AppleScript
  • một chương trình AppleScript đơn giản được khởi chạy bởi menu script tích hợp hoặc trình khởi chạy khác
    • lấy tên đường dẫn từ lựa chọn của Finder
  • một quy trình làm việc của Automator, ứng dụng hoặc trình cắm Finder
  • một tệp thực thi .command(thường là tập lệnh shell; mở trong Finder để chạy nó trong Terminal )
    • lấy tên đường dẫn từ lựa chọn của Finder (thông qua osascript )
  • một số công cụ của bên thứ ba đã cung cấp chức năng bạn cần

7

Tôi không nghĩ có một cách để làm điều này trực tiếp. Bạn có thể xây dựng một ứng dụng "Máy tự động" sẽ thực hiện một số thứ bạn đang tìm kiếm. Điều này cho thấy ngăn xếp Automator sẽ trông như thế nào:

nhập mô tả hình ảnh ở đây

Lưu kết quả dưới dạng Ứng dụng, sau đó trong công cụ tìm, chọn tệp, nhấp chuột phải và chọn "Mở bằng" sau đó chọn ứng dụng của bạn. (Bạn có thể cần chọn "Khác ..." ở cuối danh sách ứng dụng.)

Bạn không được tương tác với tập lệnh bằng phương pháp này, nhưng bạn có thể lặp qua các tệp để thực hiện một số tập lệnh shell.


Thậm chí còn dễ dàng hơn nếu bạn kéo các tệp qua biểu tượng ứng dụng và thả chúng.
kiamlaluno

5

Dịch vụ là cách xử lý loại điều này.

Trong Menu Ứng dụng (trong trường hợp này là 'Trình tìm kiếm'), luôn có (hầu như) luôn có một Servicestùy chọn menu sẽ cung cấp Dịch vụ áp dụng cho Ứng dụng hiện tại trạng thái hiện tại của nó. Thông thường trạng thái là loại đối tượng được chọn (văn bản, tệp / thư mục, v.v.).

Chúng có thể được bật, tắt và tắt các phím tắt được chỉ định trong bảng Tùy chọn hệ thống chỉ có ý nghĩa đối với cuối cùng trong ba Keyboard.

các phím tắt bàn phím

Để tạo một Dịch vụ áp dụng tập lệnh shell cho các tệp / thư mục trong Finder:

Khởi và tạo một Servicetài liệu loại mới .

Dịch vụ mới

  • đặt loại đối tượng mà Dịch vụ áp dụng cho ( files or folders)
  • đặt Ứng dụng có sẵn Dịch vụ ( )
    • Hoặc là có một Get Selected Finder Itemshành động.
  • thêm một hành động của Run Shell Script
  • quyết định nếu bạn muốn đầu vào là đối số hoặc

Nó sẽ trông giống như thế này:

kịch bản shell ví dụ

sẽ tự động đặt nó vào ~/Library/Servicesthư mục của bạn khi bạn lưu, nó sẽ làm cho nó có sẵn (gần như) ngay lập tức thông qua Application -> Servicesmenu, hoặc menu ngữ cảnh (nhấp chuột phải).

thư mục kiểm tra

kết quả tài liệu TextEdit



1

Trong Mac OS X, ngôn ngữ tập lệnh ưa thích là Applescript. Bạn có thể tạo một giọt (tập lệnh sẽ làm gì đó khi bạn thả một số tệp qua biểu tượng của nó), đặt biểu tượng tập lệnh (có thể được lưu dưới dạng ứng dụng) trên màn hình và kéo và thả các tệp bạn muốn truyền vào kịch bản.

Thay thế, bạn có thể sử dụng các hành động thư mục. Có thể liên kết một tập lệnh Applescript vào một thư mục sẽ được thực thi tất cả các lần một số tệp (hoặc thư mục) được bỏ qua thư mục.


1

Tôi cũng muốn làm điều đó, tuy nhiên không giống như các giải pháp ở trên, tôi muốn tạo ra các tham số được trích dẫn cho tập lệnh shell. Những phương pháp khác đều ổn, nhưng chúng giống như gợi ý "chỉ cần lệnh-v vào thiết bị đầu cuối" khi điều bạn thực sự muốn là pbpaste.

Tôi muốn tạo một hàm shell mà tôi có thể sử dụng trong các tập lệnh mở rộng thành tham số tệp cho mỗi lựa chọn Finder. Tôi sử dụng vỏ cá và điều này dường như hoạt động phần nào:

function selection
    osascript -e "tell application \"Finder\" to set s to the selection as alias list" -e "repeat with f in s" -e "set contents of f to POSIX path of f" -e "end repeat" -e "set AppleScript's text item delimiters to linefeed" -e "s as string"
end

Được sử dụng (một lần nữa trong vỏ cá) như thế nào convert-video (selection).

Trong một hàm bash, có thể cần phải trích dẫn đầu ra với một cái gì đó giống như | tr '\n' '\0' | xargs -0 printf "%q" {}ở cuối lệnh osascript, không chắc chắn.

(lưu ý: tất cả mọi thứ tôi biết về applescript & shell script nâng cao tôi đã học lại trong 2 giờ qua và sẽ quên vào ngày mai)


Gần đây, đã cố gắng làm điều này trong bash, thất bại, đã hỏi trên đây superuser.com/questions/1353966 , nhận được câu trả lời cho biết: không, không thể: ^ (Bash bạn thua, cũng sẽ chuyển sang vỏ cá trên máy Mac của tôi. rằng tôi sử dụng thủ thuật kéo để tìm được đề cập bởi Chris Johnsen ở trên, khá nhiều.
Pierre Houston

1

Dựa trên các câu trả lời ở trên, tôi đã xây dựng điều này

https://github.com/commonpike/DropShell

Về cơ bản, một ứng dụng applescript gọi shellfile nằm trong ứng dụng với các tệp bị bỏ làm đối số. Bạn có thể sửa đổi tập lệnh shell nếu cần.


0

Dựa trên câu trả lời của Commonpike, tôi đã tạo ra một AppleScript, chuyển hướng tất cả các tệp được thả vào nó, thành một tập lệnh shell với tên phù hợp. Chỉ cần lưu dưới dạng ứng dụng từ bên trong ScriptEditor của Apple và đổi tên thành script.app để khớp với tập lệnh của bạn.sh https://github.com/PHolker/scripts/blob/master/DropScript.scpt

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.