Bagaimana cara menjalankan skrip shell dengan file / folder yang dipilih di finder?

13

Saya berasal dari Linux yang mudah menjalankan skrip terhadap sekumpulan file dalam nautilus atau lumba-lumba, tetapi saya agak terkejut melihat bahwa ini tidak mudah di OSX.

Lebih disukai, saya ingin sekali dapat mengeklik-ctrl pada beberapa seleksi di finder, pilih skrip saya, dan minta jendela terminal muncul untuk menunjukkan kemajuan atau interaksi pengguna apa pun.

Jeremy Cantrell
sumber

Jawaban:

8

Cara termudah, bawaan untuk melakukan ini adalah dengan hanya menyeret item dari Finder ke jendela Terminal . Saat Anda menjatuhkannya, Terminal akan "mengetikkan" nama path mereka (lolos). Anda kemudian dapat menggunakan pengeditan baris perintah shell Anda untuk memasukkan sisa perintah. Atau jika Anda berpikir ke depan, Anda dapat mengetikkan perintah terlebih dahulu lalu seret item.

Versi "seret dulu":

  1. Pilih dan seret beberapa item Finder ke jendela Terminal yang menampilkan prompt shell. Terminal akan memasukkan nama path (lolos).
  2. Ketik Control+ A(pergi ke awal baris; ⌃A adalah default, tetapi bervariasi berdasarkan shell / konfigurasi).
  3. Ketikkan perintah dan spasi Anda (akan dimasukkan sebelum nama path).

Versi "berpikir ke depan":

  1. Dalam urutan apa pun, lakukan keduanya:
    • Di jendela Terminal , ketikkan bagian awal dari perintah dan spasi Anda (semuanya kecuali nama path).
    • Pilih beberapa item di Finder .
  2. Seret item yang dipilih dari Finder ke jendela Terminal tempat Anda mengetik perintah.
  3. Aktifkan jendela Terminal dan tekan Return.

Anda dapat (seperti jawaban lain telah mengindikasikan) beralih ke AppleScript atau Automator jika Anda membutuhkan lebih banyak solusi yang lebih otomatis. Karena “komponen bergerak” tambahan dapat menambah kompleksitas pada solusi, Anda harus mempertimbangkan manfaat dari proses di atas (manual, tetapi fleksibel) terhadap kompleksitas penerapan satu atau lebih dari solusi otomatis.

Beberapa kemungkinan otomatisasi meliputi:

  • aplikasi tetesan AppleScript
  • program AppleScript sederhana yang diluncurkan oleh menu skrip bawaan atau peluncur lainnya
    • dapatkan nama path dari pilihan Finder
  • alur kerja Automator, aplikasi, atau plug-in Finder
  • .commandfile yang dapat dieksekusi (biasanya skrip shell; buka di Finder untuk menjalankannya di Terminal )
    • dapatkan nama path dari pilihan Finder (via osascript )
  • beberapa alat pihak ketiga yang sudah menyediakan fungsionalitas yang Anda butuhkan
Chris Johnsen
sumber
7

Saya tidak berpikir ada cara untuk melakukan ini secara langsung. Anda dapat membangun aplikasi "Automator" yang akan melakukan apa yang Anda cari. Ini menunjukkan seperti apa tumpukan Automator:

masukkan deskripsi gambar di sini

Simpan hasilnya sebagai Aplikasi, lalu di finder pilih file, klik kanan dan pilih "Open with" lalu pilih aplikasi Anda. (Anda mungkin perlu memilih "Lainnya ..." di bagian bawah daftar aplikasi.)

Anda tidak bisa berinteraksi dengan skrip dengan metode ini, tetapi Anda dapat mengulang file untuk melakukan beberapa skrip shell.

Peter Murray
sumber
Bahkan lebih mudah jika Anda menyeret file di atas ikon aplikasi, dan menjatuhkannya.
kiamlaluno
5

Layanan adalah bagaimana menangani hal semacam ini.

Di bawah Menu Aplikasi (dalam hal ini 'Finder') selalu ada (hampir) Servicesopsi menu yang akan menyediakan Layanan yang berlaku untuk Aplikasi saat ini dan keadaan saat ini. Biasanya keadaan adalah jenis objek apa yang dipilih (teks, file / folder, dll).

Mereka dapat diaktifkan, dinonaktifkan, dan ditetapkan pintasan keyboard di panel System Preferences yang hanya masuk akal untuk yang terakhir dari ketiga Keyboard,.

pintasan keyboard

Untuk membuat Layanan yang menerapkan skrip shell ke file / folder di Finder:

Luncurkan dan buat Servicedokumen tipe baru .

Layanan Baru

  • setel jenis objek yang akan digunakan Layanan ( files or folders)
  • setel Aplikasi tempat Layanan tersedia ( )
    • Atau ada Get Selected Finder Itemstindakan.
  • tambahkan tindakan Run Shell Script
  • putuskan apakah Anda ingin input sebagai argumen atau

Seharusnya terlihat seperti ini:

contoh skrip shell

akan secara otomatis menempatkannya di ~/Library/Servicesfolder Anda ketika Anda menyimpan yang akan membuatnya tersedia (hampir) segera melalui Application -> Servicesmenu, atau menu kontekstual (klik kanan).

folder uji

dokumen TextEdit yang dihasilkan

Danau
sumber
Kalau dipikir-pikir, saya seharusnya menautkan Bagaimana membuat layanan OS X yang meneruskan jalur file ke skrip shell? yang memiliki jawaban yang sangat mirip .
Danau
1

Di Mac OS X, bahasa skrip yang disukai adalah Applescript. Anda dapat membuat tetesan (skrip yang akan melakukan sesuatu ketika Anda menjatuhkan beberapa file di atas ikonnya), menempatkan ikon skrip (yang dapat disimpan sebagai aplikasi) di atas desktop, dan seret dan taruh file yang ingin Anda sampaikan ke naskah.

Sebagai alternatif, Anda dapat menggunakan tindakan folder. Dimungkinkan untuk mengaitkan skrip Applescript ke folder yang akan dieksekusi setiap kali beberapa file (atau direktori) dilemparkan ke folder.

kiamlaluno
sumber
1

Saya sudah ingin melakukan itu juga, namun tidak seperti solusi di atas, saya ingin menghasilkan parameter yang dikutip untuk skrip shell. Metode-metode lain baik-baik saja, tetapi mereka seperti menyarankan "hanya perintah-v ke terminal" ketika apa yang Anda inginkan sebenarnya pbpaste.

Saya ingin membuat fungsi shell yang dapat saya gunakan dalam skrip yang diperluas ke parameter file untuk setiap pilihan Finder. Saya menggunakan cangkang ikan dan ini sepertinya bekerja:

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

Digunakan (lagi di kulit ikan) seperti convert-video (selection).

Dalam fungsi bash, mungkin perlu mengutip output dengan sesuatu seperti | tr '\n' '\0' | xargs -0 printf "%q" {}pada akhir perintah osascript itu, tidak yakin.

(catatan: semua yang saya tahu tentang skrip applescript & shell tingkat lanjut saya pelajari kembali dalam 2 jam terakhir dan akan dilupakan besok)

Pierre Houston
sumber
Sedang mencoba melakukan ini di bash baru-baru ini, gagal, bertanya di sini superuser.com/questions/1353966 , mendapat jawaban yang menunjukkan: tidak, tidak mungkin: ^ (Bash Anda kalah, akan beralih ke shell ikan di Mac pekerjaan saya juga. Catatan yang saya lakukan menggunakan trik drag-to-finder disebutkan oleh Chris Johnsen di atas, cukup banyak.
Pierre Houston
1

Berdasarkan jawaban di atas, saya membangun benda ini

https://github.com/commonpike/DropShell

Pada dasarnya aplikasi applescript yang memanggil shellfile terletak di aplikasi dengan file yang dijatuhkan sebagai argumen. Anda dapat memodifikasi skrip shell sesuai kebutuhan.

Commonpike
sumber
0

Berdasarkan jawaban commonpike, saya telah membuat AppleScript, yang mengalihkan semua file yang jatuh ke dalamnya, ke skrip shell dengan nama yang cocok. Cukup simpan sebagai aplikasi dari dalam ScriptEditor Apple dan ganti nama menjadi script.app untuk mencocokkan script.sh Anda https://github.com/PHolker/scripts/blob/master/DropScript.scpt

PHolker
sumber