Tôi muốn biết sự khác biệt giữa cái này là gì
ls | xargs rm
ls | xargs -i{} rm {}
Cả hai đều làm việc cho tôi
Tôi muốn biết sự khác biệt giữa cái này là gì
ls | xargs rm
ls | xargs -i{} rm {}
Cả hai đều làm việc cho tôi
Câu trả lời:
xargs rm
sẽ gọi rm
với tất cả các đối số là tham số khởi hành với khoảng trắng.
xargs -i{} rm {}
sẽ gọi rm {}
cho từng đối số và {}
sẽ được thay thế bằng đối số hiện tại.
Nếu bạn có 2 đối số a.txt
và b.txt
, xargs rm
sẽ gọi đây
rm a.txt b.txt
Nhưng xargs -i{} rm {}
sẽ gọi
rm a.txt
rm b.txt
Điều này là do -i
tùy chọn ngụ ý -L 1
tùy chọn có nghĩa là lệnh rm
sẽ chỉ nhận 1
dòng mỗi lần. Và ở đây mỗi dòng chỉ chứa 1 đối số.
Kiểm tra liên kết Ideone này để có thêm ý tưởng về nó.
rm
nó không thành vấn đề
-i tùy chọn (tương đương với --replace) tạo ra một loại giữ chỗ trong đó xargs lưu trữ đầu vào mà nó vừa nhận được. Trong lệnh thứ hai của bạn, trình giữ chỗ là "{}", nó hoạt động như tùy chọn find -exec. Sau khi được xác định, xargs sẽ thay thế trình giữ chỗ này bằng toàn bộ dòng đầu vào. Nếu bạn không chọn tên như "{}", bạn có thể xác định tên của riêng mình:
ls | xargs -iPLACEHOLDER lặp lại PLACEHOLDER
Trong trường hợp của bạn, cả hai lệnh đều tạo ra cùng một kết quả. Ở dạng thứ hai, bạn chỉ thực hiện rõ ràng hành vi mặc định với tùy chọn -i.