Ví dụ Sử dụng lệnh "xargs"

Mô tả và giới thiệu

Lệnh xargs thường được sử dụng trong một dòng lệnh nơi đầu ra của một lệnh được truyền vào như các đối số đầu vào cho một lệnh khác.

Trong nhiều trường hợp, không có lệnh đặc biệt nào như xargs cần thiết để thực hiện điều đó, vì các toán tử "đường ống" và "chuyển hướng" thực hiện cùng một giao dịch kiểu. Tuy nhiên, đôi khi có những vấn đề với cơ chế đường ống và chuyển hướng cơ bản, ví dụ, nếu các đối số có chứa khoảng trống, thì các xarg đó sẽ vượt qua.

Ngoài ra, xargs thực hiện lệnh được chỉ định liên tục, nếu cần thiết, để xử lý tất cả các đối số đã cho. Trong thực tế, bạn có thể xác định có bao nhiêu đối số nên được đọc khỏi luồng đầu vào tiêu chuẩn mỗi khi xarg thực hiện lệnh được chỉ định.

Nói chung, lệnh xargs nên được sử dụng nếu đầu ra của một lệnh được sử dụng như một phần của các tùy chọn hoặc đối số của lệnh thứ hai mà dữ liệu được truyền trực tiếp (sử dụng toán tử đường ống "|"). Đường ống thông thường là đủ nếu dữ liệu được dự định là đầu vào (chuẩn) của lệnh thứ hai.

Ví dụ: nếu bạn sử dụng lệnh ls để tạo danh sách tên tệp và thư mục, sau đó đưa danh sách này vào lệnh xargs thực thi echo , bạn có thể chỉ định có bao nhiêu tên tệp hoặc tên thư mục được xử lý bằng tiếng vọng trên mỗi lần lặp như sau :

ls | xargs -n 5 echo

Trong trường hợp này, echo nhận năm tên tệp hoặc thư mục cùng một lúc. Kể từ khi echo thêm một ký tự dòng mới ở cuối, năm tên được viết trên mỗi dòng.

Nếu bạn thực hiện một lệnh trả về một số lượng lớn và không thể đoán trước (ví dụ tên tệp) được chuyển sang lệnh khác để xử lý tiếp, bạn nên kiểm soát số lượng đối số tối đa mà lệnh thứ hai nhận được để tránh quá tải và bị lỗi.

Dòng lệnh sau phân vùng luồng của các tên tệp được tạo ra bằng cách tìm int các nhóm 200 trước khi chuyển sang lệnh cp , sao chép chúng vào thư mục sao lưu .

tìm ./ -type f -name "* .txt" -print | xargs -l200 -i cp -f {} ./backup

Phần tử "./" trong lệnh find chỉ định thư mục hiện tại để tìm kiếm. Đối số "-type f" giới hạn tìm kiếm thành tệp và cờ "-name" * .txt "tiếp tục lọc ra bất kỳ thứ gì không có đuôi" .txt ". Cờ -i trong các dấu hiệu xargs là { } ký hiệu đại diện cho mỗi tên tập tin của hơi nước.

Lệnh sau tìm các tệp có tên lõi trong hoặc bên dưới thư mục / tmp và xóa chúng.

tìm / tmp -name lõi-type f -print | xargs / bin / rm -f

Lưu ý rằng thao tác này sẽ hoạt động không chính xác nếu có bất kỳ tên tệp nào chứa dòng mới, dấu ngoặc đơn hoặc dấu ngoặc kép hoặc dấu cách. Phiên bản sau xử lý tên tệp theo cách mà tên tệp hoặc thư mục chứa dấu ngoặc đơn hoặc dấu ngoặc kép, dấu cách hoặc dòng mới được xử lý chính xác.

tìm / tmp -name core-type f -print0 | xargs -0 / bin / rm -f

Thay vì tùy chọn -i, bạn cũng có thể sử dụng cờ -I chỉ định chuỗi được thay thế bởi dòng đầu vào trong các đối số lệnh như trong ví dụ này:

ls dir1 | xargs -I {} -t mv dir1 / {} dir / {} / code>

Chuỗi thay thế được định nghĩa là "{}". Điều này có nghĩa, bất kỳ sự xuất hiện nào của "{}" trong các đối số lệnh được thay thế bởi phần tử đầu vào được chuyển tiếp tới arg thông qua hoạt động đường ống. Điều này cho phép bạn đặt các phần tử đầu vào tại các vị trí cụ thể trong các đối số của lệnh được (lặp lại) được thực thi.