Những dấu ngoặc nhọn này được để lại một mình bởi bash; chúng thuộc findvà xargs, tương ứng, và được mô tả trong trang người đàn ông của họ.
man find
-exec chỉ huy ;
Thực thi lệnh ; đúng nếu trạng thái 0 được trả về. Tất cả các đối số sau đây cần tìm được lấy làm đối số cho lệnh cho đến khi gặp một đối số bao gồm ;. Chuỗi {}được thay thế bằng tên tệp hiện tại đang được xử lý ở mọi nơi nó xuất hiện trong các đối số cho lệnh, không chỉ trong các đối số chỉ có một mình, như trong một số phiên bản find. Cả hai công trình này có thể cần phải được thoát ra (với a \) hoặc được trích dẫn để bảo vệ chúng khỏi sự mở rộng của vỏ. Xem phần EXAMPLES để biết ví dụ về việc sử dụng -exectùy chọn. Các quy định
lệnhđược chạy một lần cho mỗi tệp phù hợp. Lệnh được thực thi trong thư mục bắt đầu. Có những vấn đề bảo mật không thể tránh khỏi xung quanh việc sử dụng -exec
hành động; bạn nên sử dụng -execdirtùy chọn thay thế.
-exec chỉ huy {} +
Biến thể -exechành động 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ệnh 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ư cách xargsxây dựng các dòng lệnh của nó. Chỉ một trường hợp {}được cho phép trong lệnh. Lệnh được thực thi trong thư mục bắt đầu. Nếu findgặp lỗi, điều này đôi khi có thể gây ra lối thoát ngay lập tức, do đó một số lệnh đang chờ xử lý có thể không được chạy. Biến thể này -execluôn luôn trả về đúng sự thật.
-execdir chỉ huy ;
-execdir chỉ huy {} +
Giống như -exec, nhưng lệnh được chỉ định được chạy từ thư mục con chứa tệp phù hợp, thường không phải là thư mục mà bạn bắt đầu tìm thấy. Đây là một phương pháp an toàn hơn nhiều để gọi các lệnh, vì nó tránh các điều kiện chạy đua trong khi giải quyết các đường dẫn đến các tệp phù hợp. Như với -exec hành động,
+ hình thức -execdir sẽ xây dựng một dòng lệnh để xử lý nhiều hơn một tệp phù hợp, nhưng bất kỳ lệnh gọi nào được đưa ra sẽ chỉ liệt kê các tệp tồn tại trong cùng thư mục con. Nếu bạn sử dụng tùy chọn này, bạn phải đảm bảo rằng $PATHbiến môi trường của bạn không tham chiếu.; mặt khác, kẻ tấn công có thể chạy bất kỳ lệnh nào chúng thích bằng cách để lại tệp có tên thích hợp trong thư mục mà bạn sẽ chạy -execdir. Điều tương tự cũng áp dụng cho việc có các mục trong $PATHđó trống hoặc không phải là tên thư mục tuyệt đối. Nếu findgặp lỗi, điều này đôi khi có thể gây ra lối thoát ngay lập tức, do đó một số lệnh đang chờ xử lý có thể không được chạy. Kết quả của hành động phụ thuộc vào việc biến thể +hoặc ;biến thể đang được sử dụng;
-execdir lệnh {} + luôn trả về true, trong khi -execdir lệnh chỉ {} ; trả về true nếu lệnh trả về 0.
man xargs
-I thay thế
Thay thế các lần xuất hiện của str-str trong các đối số ban đầu bằng các tên được đọc từ đầu vào tiêu chuẩn. Ngoài ra, khoảng trống không được trích dẫn không chấm dứt các mục đầu vào; thay vào đó dấu phân cách là ký tự dòng mới. Ngụ ý -xvà -L 1.
-i[ thay thế-str ], --replace[ =thay thế-str ]
Tùy chọn này là một từ đồng nghĩa với -Ithay thế nếu str-str được chỉ định. Nếu đối số str-str bị thiếu, hiệu ứng sẽ giống như -I{}. Tùy chọn này không được chấp nhận; sử dụng -Ithay thế.
Chỉnh sửa: và ở đây TẠI SAO bash bỏ qua các dấu ngoặc nhọn:
man bash
{ danh sách; }
danh sách được thực hiện đơn giản trong môi trường shell hiện tại. danh sách phải được chấm dứt bằng một dòng mới hoặc dấu chấm phẩy. Điều này được gọi là một lệnh nhóm. Trạng thái trả về là trạng thái thoát của danh sách. Lưu ý rằng không giống như các siêu ký tự ( và ) , { và } là các từ dành riêng và phải xảy ra khi một từ dành riêng được phép được công nhận. Vì chúng không gây ra ngắt từ, chúng phải được tách ra khỏi danh sách bằng khoảng trắng hoặc metacharacter vỏ khác.
Để nhấn mạnh: danh sách phải được chấm dứt bằng một dòng mới hoặc dấu chấm phẩy .
{}- có nghĩa làtargetshành động, vớifindlệnh, đó là xóa /rmtìm thấy tệp.