Tôi nghĩ rằng đây là những cách phổ biến để chuyển kết quả của một lệnh sang lệnh tiếp theo, làm đầu vào.
Làm thế nào để ba làm việc? Hoặc một số trang web / URL là gì?
Tôi nghĩ rằng đây là những cách phổ biến để chuyển kết quả của một lệnh sang lệnh tiếp theo, làm đầu vào.
Làm thế nào để ba làm việc? Hoặc một số trang web / URL là gì?
Câu trả lời:
Điều đầu tiên cần gõ:
man find
man xargs
Các find
lệnh in kết quả đầu ra tiêu chuẩn theo mặc định, vì vậy -print
lựa chọn thường không cần thiết, nhưng -print0
tách tên tập tin với một (NULL) byte 0 để tên có chứa khoảng trắng hoặc ký tự dòng mới có thể được giải thích một cách chính xác.
Các -exec
tùy chọn là một cái gì đó bạn có thể sử dụng thay vì xargs - lệnh find thực thi một lệnh cho mỗi mục nó tìm thấy.
Các xargs
lệnh đọc chuỗi space- hoặc xuống dòng cách nhau (thường là từ tìm lệnh, nhưng họ có thể đến từ bất cứ nơi nào) và thực hiện một số lệnh cho mỗi chuỗi.
Nếu xargs được chạy với tùy chọn -0 , nó sẽ mong đợi các chuỗi được phân tách bằng NULL làm đầu ra bởifind ... -print0
Ưu điểm của xargs là nó có thể nhóm các chuỗi lại với nhau, do đó nó chỉ thực hiện một lệnh một hoặc hai lần thay vì n lần.
Vì vậy, trong cách sử dụng bình thường:
find start_directory -name '*.txt' | xargs ls -l
find sẽ liệt kê tên tệp và xargs sẽ đưa ra các lệnh như:
ls -l file1.txt file2.txt file3.txt ... fileN.txt
nhanh hơn so với việc bạn tìm lệnh phát hành:
ls -l file1.txt
ls -l file2.txt
ls -l file3.txt
ls -l ...
ls -l fileN.txt
Lưu ý rằng xargs không còn cần thiết với các triển khai tìm kiếm hiện tại mà có lẽ tất cả đều hỗ trợ cú pháp POSIX này:
find directory -name '*.txt' -exec ls -l {} +
đơn giản hơn và nhanh hơn một chút so với biến thể xargs.
find directory -name '*.txt' | xargs ls -l
Xem các bài viết sau:
Linux và Unix tìm hướng dẫn lệnh với các ví dụ
xargs: Cách kiểm soát và sử dụng đối số dòng lệnh