Điều gì là diff bentween xargs với niềng răng và không có trong linux


18

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:


19

xargs rmsẽ gọi rmvớ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.txtb.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 -itùy chọn ngụ ý -L 1tùy chọn có nghĩa là lệnh rmsẽ chỉ nhận 1dò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ó.


MÀ MỘT TỐT HƠN

1
@ user19140477031 phụ thuộc vào thao tác bạn đang thực hiện. vì rmnó không thành vấn đề
Shiplu Mokaddim

3

Với niềng răng, nó sẽ sinh ra một rmquá trình cho mỗi tệp. Nếu không có dấu ngoặc nhọn, xargssẽ truyền càng nhiều tên tệp càng tốt cho mỗi rmlệnh.

Đối chiếu

ls | xargs echo

ls | xargs -i echo '{}'

2

-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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.