Bagaimana cara membuka banyak file dari output `find`?

10

Saya tahu saya bisa membuka banyak file yang ditemukan dalam direktori seperti:

find -name *.foo -xargs <command> {} \;

Ini berfungsi, tetapi ketika mencoba untuk membuka sekelompok file teks di gedit pada saat yang sama, itu membukanya secara berurutan (ketika satu file ditutup, yang berikutnya dibuka).

Saya ingin membuka semua file itu secara bersamaan. Bagaimana saya bisa mencapai ini?

jottr
sumber

Jawaban:

15

Untuk bertindak pada banyak file sekaligus dengan find, gunakan +sebagai ganti \;:

find . -name '*.foo' -exec gedit {} +

Dengan zsh, atau dengan bash ≥4 jika Anda memasukkannya ke shopt -s globstardalam ~/.bashrc, Anda dapat menggunakan **/untuk recurse ke dalam subdirektori:

gedit **/*.foo

Zsh juga memiliki banyak kualifikasi glob yang dapat menggantikan sebagian besar penggunaan find.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
adakah yang bisa menyarankan cara menjalankannya di Mac OS X?
andilabs
@andi diselesaikan sendiri. Tetapi jika seseorang mengusulkan sesuatu yang lebih pendek, atau memaksa SublimeText untuk membuka di tab terpisah, daripada windows, itu akan jauh lebih mudah.
andilabs
@andi Ini adalah masalah dengan SublimeText, Anda harus menanyakannya sebagai utas terpisah.
Gilles 'SANGAT berhenti menjadi jahat'
Lagi pula saya pikir ini tentang format bash yang tepat, karena jika saya menjalankan misalnya open -a SublimeText admin.py forms.pymembuka di satu jendela dengan dua tab.
andilabs
2

Di Mac OS X bash Anda dapat menjalankan sesuatu seperti:

for file in $(find . -name "*.py"); do open -a SublimeText $file; done. 

Salah satu kelemahannya adalah ia terbuka di jendela baru Sublime alih-alih menggunakan tab baru.

andilab
sumber
0

Saya pikir dalam hal ini Anda dapat menggunakan

find ./ -name \*.foo | xargs gedit
pbm
sumber
1
Ini tidak akan berfungsi jika nama file berisi karakter khusus (spasi atau \'"), karena xargsmembutuhkan inputnya untuk dikutip dengan cara yang findtidak menghasilkan. Baik menggunakan find … -print0 | xargs -0 …, atau menggunakan yang lebih sederhana find … -exec … {} +.
Gilles 'SO- stop being evil'
Juga, meskipun ini tidak berlaku dalam kasus ini, -print0 | xargs -0memiliki masalah bahwa stdin telah melahap, dan tidak lagi terpasang ke terminal. Masalah jika Anda mencoba menggunakan editor mode teks.
derobert