Tôi muốn biết ý nghĩa của {} +
trong exec
lệnh, và sự khác biệt giữa những gì là {} +
và {} \;
. Nói chính xác, sự khác biệt giữa hai điều này là gì:
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
Tôi muốn biết ý nghĩa của {} +
trong exec
lệnh, và sự khác biệt giữa những gì là {} +
và {} \;
. Nói chính xác, sự khác biệt giữa hai điều này là gì:
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
Câu trả lời:
Sử dụng ;
(dấu chấm phẩy) hoặc +
(dấu cộng) là bắt buộc để chấm dứt các lệnh shell được gọi bởi -exec
/ execdir
.
Sự khác biệt giữa ;
(dấu chấm phẩy) hoặc +
(dấu cộng) là cách các đối số được truyền vào find -exec
/ -execdir
tham số. Ví dụ:
bằng cách sử dụng ;
sẽ thực thi nhiều lệnh (riêng cho từng đối số),
Thí dụ:
$ find /etc/rc* -exec echo Arg: {} ';'
Arg: /etc/rc.common
Arg: /etc/rc.common~previous
Arg: /etc/rc.local
Arg: /etc/rc.netboot
Tất cả các đối số sau đây
find
được coi là đối số cho lệnh.Chuỗi
{}
được thay thế bằng tên tệp hiện tại đang được xử lý.
bằng cách sử dụng +
sẽ thực thi các lệnh ít nhất có thể (vì các đối số được kết hợp với nhau). Nó rất giống với cách xargs
hoạt động của lệnh, vì vậy nó sẽ sử dụng càng nhiều đối số trên mỗi lệnh càng tốt để tránh vượt quá giới hạn tối đa của đối số trên mỗi dòng.
Thí dụ:
$ find /etc/rc* -exec echo Arg: {} '+'
Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
Dòng lệnh được xây dựng bằng cách nối thêm từng tên tệp được chọn ở cuối.
Chỉ một trường hợp
{}
được cho phép trong lệnh.
Xem thêm:
Cho rằng lệnh find được dưới ba tệp:
fileA
fileB
fileC
Nếu bạn sử dụng -exec
với dấu cộng ( +
),
find . -type f -exec chmod 775 {} +
nó sẽ là:
chmod 775 fileA fileB fileC
Dòng lệnh được xây dựng bằng cách nối thêm mỗi tên tệp phù hợp ở cuối, giống như cách xargs
xây dựng các dòng lệnh của nó. Tổng số lệnh gọi của lệnh ( chmod
trong trường hợp này) sẽ ít hơn nhiều so với số lượng tệp được khớp.
Nếu bạn sử dụng -exec
với dấu chấm phẩy ( ;
),
find . -type f -exec chmod 775 {} \;
nó sẽ là:
chmod 775 fileA
chmod 775 fileB
chmod 775 fileC
Theo man find
:
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 mỗi 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ư 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.
man find(1)
rất chi tiết, dễ dàng được tìm thấy bởi bất cứ ai. Đừng lười biếng.