Những dấu ngoặc nhọn này được để lại một mình bởi bash; chúng thuộc find
và 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 -exec
tù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 -execdir
tùy chọn thay thế.
-exec
chỉ huy {}
+
Biến thể -exec
hà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 xargs
xâ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 find
gặ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 -exec
luô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 $PATH
biế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 find
gặ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ụ ý -x
và -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 -I
thay 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 -I
thay 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àtargets
hành động, vớifind
lệnh, đó là xóa /rm
tìm thấy tệp.