Làm thế nào để mở nhiều tệp từ đầu ra `find`?


10

Tôi biết tôi có thể mở nhiều tệp được tìm thấy trong một thư mục như vậy:

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

Điều này hoạt động, nhưng khi cố gắng mở một loạt các tệp văn bản trong gedit cùng một lúc, nó sẽ mở chúng liên tiếp (khi một tệp được đóng, tệp tiếp theo được mở).

Tôi muốn mở tất cả các tệp đó cùng một lúc. Làm thế nào tôi có thể đạt được điều này?

Câu trả lời:


15

Để hành động trên nhiều tệp cùng một lúc find, hãy sử dụng +thay vì \;:

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

Với zsh hoặc với bash ≥4 nếu bạn đặt shopt -s globstarvào ~/.bashrc, bạn có thể sử dụng **/để lặp lại thành các thư mục con:

gedit **/*.foo

Zsh cũng có nhiều vòng loại toàn cầu có thể thay thế hầu hết việc sử dụng find.


ai đó có thể đề nghị làm thế nào để chạy nó trên Mac OS X?
andilabs

@andi tự mình giải quyết. Nhưng nếu ai đó đề xuất đôi khi ngắn hơn hoặc buộc SublimeText mở trong các tab riêng biệt, thay vì cửa sổ, nó sẽ bị lỗi nhiều.
andilabs

@andi Đây là một vấn đề với SublimeText, bạn nên hỏi nó như một chủ đề riêng biệt.
Gilles 'SO- ngừng trở nên xấu xa'

dù sao tôi nghĩ rằng đó là về định dạng bash chính xác, bởi vì nếu tôi chạy chẳng hạn, open -a SublimeText admin.py forms.pynó sẽ mở trong một cửa sổ với hai tab.
andilabs

2

Trên Mac OS X bash, bạn có thể chạy một cái gì đó như:

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

Một nhược điểm là nó mở trong cửa sổ mới của Sublime thay vì sử dụng tab mới.


0

Tôi nghĩ rằng trong trường hợp này bạn có thể sử dụng

find ./ -name \*.foo | xargs gedit

1
Điều này sẽ không hoạt động nếu tên tệp chứa các ký tự đặc biệt (khoảng trắng hoặc \'"), bởi vì xargsyêu cầu đầu vào của nó phải được trích dẫn theo cách findkhông tạo ra. Hoặc sử dụng find … -print0 | xargs -0 …, hoặc sử dụng đơn giản hơn find … -exec … {} +.
Gilles 'SO- ngừng trở nên xấu xa'

Ngoài ra, mặc dù nó không áp dụng trong trường hợp này, -print0 | xargs -0có vấn đề là stdin đã bị ngấu nghiến và không còn được gắn vào thiết bị đầu cuối. Một vấn đề nếu bạn đang cố gắng sử dụng trình chỉnh sửa chế độ văn bản.
derobert
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.