Computer >> Máy Tính >  >> Hệ thống >> Linux

Cách sử dụng lệnh xargs trong Linux

Cách sử dụng lệnh xargs trong Linux

Đối với một số người dùng nhiều kinh nghiệm hơn, chúng tôi luôn tìm cách tìm ra những cách mới để làm việc thông minh hơn và không vất vả hơn ở thiết bị đầu cuối. xargs là một lệnh hữu ích hoạt động như một cầu nối giữa hai lệnh, đọc kết quả đầu ra của một lệnh và thực thi lệnh kia với các mục được đọc. Lệnh này thường được sử dụng nhất trong các tình huống khi người dùng đang tìm kiếm một mẫu, xóa và đổi tên tệp, v.v. Sau đây, chúng tôi hướng dẫn bạn cách sử dụng xargs lệnh có lợi cho bạn.

xargs là gì?

Ở dạng cơ bản, xargs đọc thông tin từ đầu vào chuẩn (hoặc STDIN) và thực hiện lệnh một hoặc nhiều lần với các mục đã đọc. Có rất nhiều minh chứng đơn giản, nhưng đây là minh chứng cho thấy ý tôi muốn nói.

Để có xargs thực thi ls trên thư mục Documents của tôi, tôi sẽ chạy lệnh sau:

echo "Documents" | xargs ls
Cách sử dụng lệnh xargs trong Linux

Ký tự ống dẫn | đang đặt bất kỳ thứ gì có trước đó dưới dạng STDIN cho xargs .

Bạn có thể thấy rằng xargs đọc thư mục Tài liệu của tôi mà không có vấn đề gì. Đây chỉ là một ví dụ về khả năng của xargs lệnh.

Trong khi xargs lệnh có thể được sử dụng trong các hoạt động dòng lệnh khác nhau, nó thực sự tiện dụng khi được sử dụng với find yêu cầu. Trong bài viết này, chúng tôi thảo luận về một số ví dụ hữu ích để hiểu cách xargsfind có thể được sử dụng cùng nhau.

Hoạt động liên quan đến nhiều tệp

Giả sử bạn muốn sao chép nội dung của “ref.txt” vào tất cả các tệp văn bản có trong một thư mục. Mặc dù nhiệm vụ có thể yêu cầu bạn thực hiện nhiều lệnh, nhưng xargs cùng với find lệnh, làm cho nó đơn giản. Tôi có một vài thư mục thử nghiệm. Một có “test0.txt”, chứa văn bản và thư mục còn lại có 10 tệp thử nghiệm khác không có văn bản trong đó. Nếu tôi muốn lấy nội dung của test0.txt và sao chép nó vào phần còn lại của các tệp văn bản trong các thư mục khác, tôi sẽ chạy lệnh sau:

find ./test-dir1/ -name "*.txt" | xargs -n1 cp test0.txt
Cách sử dụng lệnh xargs trong Linux

Để hiểu lệnh hiển thị ở trên, hãy chia nó thành hai phần.

Phần đầu tiên là find ./test-dir1/ -name "*.txt" , tìm kiếm tất cả các tệp .txt có trong thư mục “test-dir1”. Bạn có thể chỉ định bất kỳ thư mục nào ở đây.

Phần thứ hai, xargs -n1 cp test.txt , sẽ lấy đầu ra của lệnh đầu tiên (tên tệp kết quả) và chuyển nó cho cp (sao chép) từng lệnh một. Lưu ý rằng -n ở đây tùy chọn rất quan trọng, vì nó hướng dẫn xargs để sử dụng một đối số cho mỗi lần thực thi.

Khi được kết hợp với nhau, lệnh đầy đủ sẽ sao chép nội dung của “test0.txt” vào tất cả các tệp .txt trong thư mục.

Cách sử dụng lệnh xargs trong Linux

Hoạt động liên quan đến số lượng lớn các tranh luận

Một trong những lợi ích chính của việc sử dụng xargs là khả năng xử lý một số lượng lớn các đối số. Ví dụ:trong khi xóa một số lượng lớn tệp trong một lần, rm đôi khi lệnh sẽ không thành công với “ Danh sách đối số quá dài " lỗi. Đó là bởi vì nó không thể đơn giản xử lý một danh sách dài các đối số như vậy. Trường hợp này thường xảy ra khi bạn có quá nhiều tệp trong thư mục mà bạn muốn xóa.

Giả sử bạn có 75 tệp PDF và gặp lỗi khi xóa chúng.

Cách sử dụng lệnh xargs trong Linux

Điều này có thể được khắc phục dễ dàng với xargs . Để xóa tất cả các tệp này, hãy sử dụng lệnh sau:

find ./test-dir2/ -type f -name "*.pdf" -print | xargs rm -f
Cách sử dụng lệnh xargs trong Linux

Hoạt động liên quan đến tìm kiếm mẫu

Các nhà phát triển phần mềm cũng như quản trị viên hệ thống thực hiện rất nhiều tìm kiếm theo mẫu trong khi làm việc trên dòng lệnh. Ví dụ:một nhà phát triển có thể muốn xem nhanh các tệp dự án sửa đổi một biến cụ thể hoặc quản trị viên hệ thống có thể muốn xem các tệp sử dụng một tham số cấu hình hệ thống cụ thể. Trong các trường hợp này, xargs , cùng với findgrep , giúp mọi thứ trở nên dễ dàng với bạn.

Ví dụ:để tìm kiếm tất cả các tệp “.txt” có chứa chuỗi “maketecheasier”, hãy chạy lệnh sau:

find ./ -name "*.txt" | xargs grep "maketecheasier"

Đây là kết quả đầu ra của lệnh được tạo trên hệ thống của tôi.

Cách sử dụng lệnh xargs trong Linux

Thao tác Cắt / Sao chép

Xargs , cùng với find , cũng có thể được sử dụng để sao chép hoặc di chuyển một tập hợp các tệp từ thư mục này sang thư mục khác. Ví dụ:để di chuyển tất cả các tệp văn bản hơn 10 phút từ thư mục hiện tại sang thư mục trước đó, hãy sử dụng lệnh sau:

find . -name "*.txt" -mmin +10 | xargs -n1 -I '{}' mv '{}' ../

-I tùy chọn dòng lệnh được sử dụng bởi xargs lệnh để xác định một chuỗi thay thế được thay thế bằng các tên được đọc từ đầu ra của find yêu cầu. Ở đây chuỗi thay thế là {} , nhưng nó có thể là bất cứ điều gì. Ví dụ:bạn có thể sử dụng “tệp” làm chuỗi thay thế.

find . -name "*.txt" -mmin 10 | xargs -n1 -I 'file' mv 'file' ./practice

Cách cho xargs biết khi nào nên thoát khỏi

Giả sử bạn muốn liệt kê chi tiết của tất cả các tệp .txt có trong thư mục hiện tại. Như đã giải thích, bạn có thể dễ dàng thực hiện bằng lệnh sau:

find . -name "*.txt" | xargs ls -l

Nhưng có một vấn đề:xargs lệnh sẽ thực thi ls ngay cả khi find lệnh không tìm thấy bất kỳ tệp .txt nào. Sau đây là một ví dụ.

Cách sử dụng lệnh xargs trong Linux

Vì vậy, bạn có thể thấy rằng không có tệp .txt nào trong thư mục, nhưng điều đó không ngăn được xargs khỏi việc thực thi ls yêu cầu. Để thay đổi hành vi này, hãy sử dụng -r tùy chọn dòng lệnh:

find . -name "*.txt" | xargs -r ls -l

Kết luận

Mặc dù ở đây tôi tập trung vào việc sử dụng xargs với find , nó cũng có thể được sử dụng với nhiều lệnh khác. Nếu bạn có nhiều lệnh phức tạp cần thực hiện, hãy xargs là một công cụ rất hữu ích.

Nếu bạn thích bài viết của chúng tôi về cách sử dụng xargs trong Linux, hãy nhớ xem một số nội dung Linux khác của chúng tôi, chẳng hạn như hướng dẫn của chúng tôi về cách khắc phục lỗi “không còn dung lượng trên thiết bị” hoặc tăng tốc Ubuntu.