Lệnh Xargs trong Linux [12 ví dụ cụ thể]

Xargs là một lệnh tuyệt vời đọc dữ liệu từ đầu vào tiêu chuẩn, sau đó tạo và thực thi các dòng lệnh; có nghĩa là nó có thể lấy đầu ra của một lệnh và gửi nó như đối số của một lệnh khác. Nếu không có lệnh được chỉ định, xargs thực thi echo theo mặc định. Bạn cũng có thể chỉ định nó đọc dữ liệu từ một tập tin thay vì stdin.

Có một số cách mà xargs hữu ích trong việc sử dụng hàng ngày trên dòng lệnh. Trong bài viết này, chúng tôi sẽ giải thích 12 ví dụ thực tế về lệnh xargs trên Linux cho người mới bắt đầu.

1. Ví dụ đầu tiên cho thấy cách tìm tất cả các hình ảnh .png và lưu trữ chúng bằng tiện ích tar như sau.

Ở đây, lệnh action -print0 cho phép in đầy đủ đường dẫn tệp lên đầu ra tiêu chuẩn, tiếp theo là ký tự null và cờ xargs -0 giải quyết hiệu quả vấn đề khoảng trắng trong tên tệp.

$ find Pictures/tecmint/ -name "*.png" -type f -print0 | xargs -0 tar -cvzf images.tar.gz
Find Images and Archive Using Tar

2. Bạn cũng có thể chuyển đổi đầu ra nhiều dòng từ lệnh ls thành một dòng duy nhất bằng xargs như sau.

$ ls -1 Pictures/tecmint/
$ ls -1 Pictures/tecmint/ | xargs
List Files in Single Line

3. Để tạo danh sách ngắn gọn của tất cả tài khoản người dùng Linux trên hệ thống, sử dụng lệnh sau.

$ cut -d: -f1 < /etc/passwd | sort | xargs
Find List of Linux Users

4. Giả sử bạn có một danh sách tệp và bạn muốn biết số dòng/từ/ký tự trong từng tệp trong danh sách, bạn có thể sử dụng lệnh ls và xargs cho mục đích này như sau.

$ ls *upload* | xargs wc
Count Number of Lines, Words and Characters in Files

5. Xarags cũng cho phép bạn tìm và xóa đệ quy một thư mục, ví dụ lệnh sau sẽ xóa đệ quy thư mục DomTerm trong thư mục Downloads.

$ find Downloads -name "DomTerm" -type d -print0 | xargs -0 /bin/rm -v -rf "{}"
Find and Recursively Delete Directory

6. Tương tự như lệnh trước, bạn cũng có thể tìm tất cả các tệp có tên net_stats trong thư mục hiện tại và xóa chúng.

$ find . -name "net_stats" -type f -print0 | xargs -0 /bin/rm -v -rf "{}"

7. Tiếp theo, sử dụng xargs để sao chép một tệp đến nhiều thư mục cùng một lúc; trong ví dụ này, chúng tôi đang cố gắng sao chép tệp.

$ echo ./Templates/ ./Documents/ | xargs -n 1 cp -v ./Downloads/SIC_Template.xlsx 
Copy File to Multiple Directories

8. Bạn cũng có thể sử dụng lệnh find, xargs và lệnh rename cùng nhau để đổi tên tất cả các tệp hoặc thư mục con trong một thư mục cụ thể thành chữ thường như sau.

$ find Documnets -depth | xargs -n 1 rename -v 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \;

9. Đây là một ví dụ sử dụng khác hữu ích cho xargs, nó cho thấy cách xóa tất cả các tệp trong một thư mục trừ một hoặc một số tệp với phần mở rộng đã cho.

$ find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}

10. Như đã đề cập trước đây, bạn có thể chỉ định xargs đọc các mục từ một tệp thay vì đầu vào tiêu chuẩn bằng cờ -a như được hiển thị.

$ xargs -a rss_links.txt

11. Bạn có thể kích hoạt tính chất hùng hồn sử dụng cờ -t, nó cho biết xargs in dòng lệnh trên đầu ra lỗi tiêu chuẩn trước khi thực thi nó.

$ find Downloads -name "DomTerm" -type d -print0 | xargs -0 -t /bin/rm -rf "{}"

12. Theo mặc định, xargs kết thúc /giới hạn các mục bằng khoảng trắng, bạn có thể sử dụng cờ -d để đặt delimiters có thể là một ký tự duy nhất, một escape ký tự theo cú pháp C như \n, hoặc một escape code bát phân hoặc thập lục phân.

Ngoài ra, bạn cũng có thể yêu cầu người dùng xem xét liệu có chạy mỗi dòng lệnh và đọc một dòng từ terminal, sử dụng cờ -p như được hiển thị (đơn giản nhập y cho yes hoặc n cho no).

$ echo ./Templates/ ./Documents/ | xargs -p -n 1 cp -v ./Downloads/SIC_Template.xlsx 
Prompt User Before Running Command

Để biết thêm thông tin, đọc trang man của xargs.

$ man xargs 

Đó là tất cả cho bây giờ! Xargs là một tiện ích mạnh mẽ để xây dựng một dòng lệnh; nó có thể giúp bạn truyền đầu ra của một lệnh như một đối số của một lệnh khác để xử lý. Trong bài viết này, chúng tôi đã giải thích 12 ví dụ thực tế về lệnh xargs cho người mới bắt đầu. Chia sẻ suy nghĩ hoặc câu hỏi của bạn với chúng tôi qua biểu mẫu phản hồi ở dưới.