tùy chọn xargs -I


12

Các xargs tay nói:

-I thay-str
--replace [= thay-str]
-i [thay-str]
Thay thế các lần thay thế 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.

Tôi không hiểu phần này: with names read from standard input.

Ví dụ: những gì đang xảy ra với:

find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo | wc -l

Đoạn mã trên đếm tổng số tệp / thư mục trong một thư mục.

Bất cứ ai có thể giải thích điều này cho tôi?

Câu trả lời:


20

"với tên được đọc từ đầu vào tiêu chuẩn" có nghĩa là xargslấy dữ liệu đến từ đầu vào tiêu chuẩn của nó, tách nó ra và sử dụng nó để chạy lệnh được đưa ra trong các đối số của nó. Theo mặc định, nó phân chia trên các khoảng trống hoặc dòng mới và chạy echovới càng nhiều đối số cùng một lúc càng tốt.

Các -0tùy chọn trong ví dụ của bạn chỉ thị xargsđể chia đầu vào của nó trên null byte thay vì khoảng trống hoặc dòng mới. Kết hợp với find's -print0, điều này cho phép tên tập tin chứa khoảng trống hoặc dòng mới được xử lý đúng cách.

Các -Itùy chọn thay đổi cách các dòng lệnh mới được xây dựng. Thay vì thêm càng nhiều đối số càng tốt tại một thời điểm, xargssẽ lấy một tên tại một thời điểm từ đầu vào của nó, hãy tìm mã thông báo đã cho ( {}ở đây) và thay thế bằng tên đó.

Trong ví dụ của bạn, {}không có trong mẫu lệnh được cung cấp cho xargs, do đó, trong thực tế, xargsđược hướng dẫn để chạy echomà không có đối số, một lần cho mỗi tên tệp được cung cấp cho nó find. Để xem điều này, hãy thả wc:

find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo

Bạn sẽ thấy một loạt các dòng trống ... So sánh điều này với

find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo {}

find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 echo

find . -mindepth 1 -maxdepth 1 -print0 | xargs -0

để hiểu rõ hơn

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.