Câu trả lời:
-exec ... \;
sẽ chạy hết mục này đến mục khác. Vì vậy, nếu bạn có ba tệp, dòng exec sẽ chạy ba lần.
-exec ... {} +
là các lệnh có thể mất nhiều hơn một tập tin tại một thời điểm (ví dụ như cat
, stat
, ls
). Các tập tin được tìm thấy find
được nối lại với nhau như một xargs
lệnh. Điều này có nghĩa là ít bị loại bỏ và cho các hoạt động nhỏ, có thể có nghĩa là tăng tốc đáng kể.
Đây là một bản demo hiệu suất trích dẫn 10.000 tập tin trống.
$ mkdir testdir
$ touch testdir/{0000..9999}
$ time find testdir/ -type f -exec cat {} \;
real 0m8.622s
user 0m0.452s
sys 0m8.288s
$ time find testdir/ -type f -exec cat {} +
real 0m0.052s
user 0m0.015s
sys 0m0.037s
Một lần nữa, điều này chỉ hoạt động trên các lệnh có thể mất nhiều tên tệp. Bạn có thể tìm ra nếu lệnh của bạn giống như vậy bằng cách xem trang chủ của nó. Đây là tóm tắt từ man cat
:
SYNOPSIS
cat [OPTION]... [FILE]...
Dấu chấm lửng trên [FILE]...
có nghĩa là nó có thể mất nhiều hơn một tệp.
+
chỉ có thể được sử dụng trên các lệnh đơn và bạn phải có chính xác một lệnh {}
trong dòng. \;
có thể hoạt động với nhiều nhóm từ 0 đến nhiều.
+
không phải là POSIX, vì vậy có thể không có sẵn trên các hệ thống không phải là Linux. Không phải là một mối quan tâm nếu bạn không bao giờ rời khỏi nền tảng, nhưng tốt để biết nếu bạn đã từng phải sử dụng Solaris. :)
-exec <command> {} ';'
bởi vì việc đánh máy của tôi dễ dàng hơn (tôi có thể chạm vào loại nhưng tôi không thực sự có kỹ thuật tốt nhất).
-exec ... {} +
là POSIX. Xem: pubs.opengroup.org/onlinepub/9699919799/utilities/iêu
-exec ... {} +
Tiện ích mở rộng đã được đề xuất để đưa vào thông số kỹ thuật POSIX vào năm 2001 và được phê chuẩn thành vấn đề POSIX 6 năm 2004. Có thể phiên bản Solaris mà bạn đã sử dụng cũ hơn tiêu chuẩn POSIX (hoặc chỉ nhắm mục tiêu phiên bản cũ hơn).
\;
, lệnh thực thi sẽ làcat 1; cat 2; cat 3
. Với+
, lệnh thực thi sẽ làcat 1 2 3
.