Lệnh + in find / path / -exec '{}' + làm gì?


13

Là gì +trong find /path/ -exec command '{}' +việc phải làm? như trái ngược vớifind /path/ -exec command '{}' \;

Câu trả lời:


17

'+' Tạo một dòng lệnh lớn trong số tất cả các tệp được tìm thấy để giảm thiểu số lượng lệnh sẽ được chạy.

Cho trường hợp một lệnh find tìm thấy bốn tệp.

find . -type f -exec command '{}' \;

sẽ sản xuất

command file1
command file2
command file3
command file4 

Mặt khác

find . -type f -exec command '{}' \+

sản xuất

command file1 file2 file3 file4

3
Nếu bạn biết xargs, -exec … {} +thực hiện tương tự -print | xargs …, nhưng không có vấn đề trích dẫn ( -print0 | xargs -0là một cách khác, nhưng nó ít di động hơn).
Gilles 'SO- ngừng trở nên xấu xa'

4

Từ trang người đàn ông:

lệnh -exec {} +

Biến thể của hành động -exec này chạy lệnh được chỉ định trên các tệp đã chọn, nhưng dòng lệnh được xây dựng bằng cách nối thêm từng tên tệp đã chọn ở cuối; tổng số lần gọi của lệnh sẽ ít hơn nhiều so với số lượng tệp được khớp. Dòng lệnh được xây dựng theo cách tương tự như xargs xây dựng các dòng lệnh của nó. Chỉ một trường hợp của `{} 'được cho phép trong lệnh. Lệnh được thực thi trong thư mục bắt đầu.


1
Người đàn ông đó rất ... ngắn gọn? Tôi thấy nó thiếu chiều sâu và rõ ràng.
xenoterracide

Ý tưởng không phải là sinh ra một cách mù quáng một quy trình cho mỗi tệp, mà là tập hợp các tên tệp lại với nhau và gọi lệnh ít lần hơn. Một ví dụ: thay vì tạo 3 quy trình "rm FILENAME" khác nhau, nó tập hợp các tên tệp và thực hiện "rm FILE1 FILE2 FILE3".
tante

IIRC một số phiên bản của xargs có tùy chọn gộp các tên này lại với nhau đến một giới hạn đã chỉ định, do đó bạn có thể hưởng lợi từ điều này nhưng cũng tránh bị tràn khi bạn có một danh sách lớn.
Kevin Cantu

(Tìm, chính nó, là một ngôn ngữ nhỏ đáng sợ của riêng mình!)
Kevin Cantu

findcho tôi một bán
Matt Alexander
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.