Điều này có thể được thực hiện từ findviệc sử dụng trực tiếp -exec:
find . -name "*.xml" -type f -exec xmllint --output '{}' --format '{}' \;
Những gì được chuyển đến -execsẽ được gọi một lần cho mỗi tệp được tìm thấy với các tham số mẫu {}được thay thế bằng tên tệp hiện tại. Việc \;kết thúc lệnh find chỉ chấm dứt dòng.
Việc sử dụng xargskhông thực sự cần thiết trong trường hợp này bởi vì chúng ta cần phải gọi xmllintmột lần cho mỗi tệp vì cả tên tệp đầu vào và đầu ra phải được chỉ định trong cùng một lệnh gọi.
xargssẽ là cần thiết nếu lệnh được chuyển đến từ find đang hoạt động trên nhiều tệp cùng một lúc và danh sách đó dài. Bạn không thể làm điều đó trong trường hợp này, vì bạn cần chuyển tên tệp duy nhất cho --outputtùy chọn xmllint. Nếu không, xargsbạn có thể gặp phải lỗi "Danh sách đối số quá dài" nếu bạn đang xử lý nhiều tệp. xargscũng hỗ trợ chuỗi thay thế tập tin với -Itùy chọn:
find . -name "*.xml" -type f | xargs -I'{}' xmllint --output '{}' --format '{}'
Sẽ làm tương tự như find -execlệnh trên. Nếu bất kỳ thư mục nào của bạn có ký tự lẻ trong không gian như bạn sẽ cần sử dụng các -0tùy chọn findvà xargs. Nhưng sử dụng xargsvới -Ingụ ý tùy chọn -L 1có nghĩa là chỉ xử lý 1 tệp tại một thời điểm, do đó bạn cũng có thể sử dụng trực tiếp findvới -exec.