Lời nói đầu: Tôi hiểu sự khác biệt giữa -exec {} \;& -exec {} +. Tôi cũng không có vấn đề như vậy , tôi chỉ tò mò về ngữ nghĩa của find.
Khi kết thúc -execđối số bằng +thay vì ;, chúng ta cần kết thúc điều này bằng {} +, ví dụ:
# FreeBSD find
$ find . -type f -exec cp {} /tmp +
find: -exec: no terminating ";" or "+"
# GNU find is even more cryptic:
$ find: missing argument to `-exec'
Sử dụng ;trong các ví dụ này thay vì +hoạt động tốt (nhưng rõ ràng làm một cái gì đó khác).
Từ POSIX :
-exec utility_name [argument ...] ;
-exec utility_name [argument ...] {} +... Chỉ một <dấu cộng> ngay sau một đối số chỉ chứa hai ký tự "
{}" sẽ chấm dứt phần cuối của biểu thức chính. Việc sử dụng <dấu cộng> khác sẽ không được coi là đặc biệt.
Nói cách khác, khi sử dụng +, lệnh cần kết thúc bằng {} +.
Tại sao lại thế này? Và tại sao chỉ với +và không ;? Lúc đầu tôi nghĩ có lẽ để tránh xung đột với tên tập tin có chứa a +, nhưng tên tập tin có ;vẻ hoạt động tốt? Tôi thấy khó tin rằng giới hạn này là tùy tiện ...
The "-exec ... {} +" syntax adopted was a result ofIEEE PASC Interpretation 1003.2 #210và trong tài liệu đó, bạn sẽ tìm thấy nhiều chi tiết hơn, ví dụ:Note that the "+" is only treated as special if it immediately follows "{}". This minimises the chances of causing problems with existing uses of "+" as an argument with "-exec".