Để lần lượt từng trường hợp: -
xargs
Có gì chương trình này không có gì để thêm mỗi dòng từ đầu vào như một tham số để bất cứ điều gì lệnh được thông qua như là tham số của riêng mình, sau đó chạy lệnh kết quả, vì vậy nếu finddanh sách ba tập tin a, bvà ctrong thư mục hiện nó sẽ cung cấp cho như đầu ra:
./a
./b
./c
Nếu điều này được dẫn đến xargs rm, thì lệnh này sẽ được thực thi:
rm ./a ./b ./c
Tuy nhiên, nếu findcũng tìm thấy một tệp được gọi " d e ", thì lệnh được thực hiện sẽ trở thành:
rm ./a ./b ./c ./ d e
Để xử lý điều này, findcung cấp một tùy chọn -print0, thêm ký tự null ( \0) sau mỗi tệp, thay vì dòng mới thông thường. Để biết xargsrằng đầu vào ở dạng này, hãy thêm tham số -0, vì vậy lệnh:
find . ... -print0|xargs -0 rm
sẽ xây dựng và thực thi lệnh:
rm "./a" "./b" ."/c" "./ d e "
Điều này sẽ hoạt động trên tất cả các tên tệp, bao gồm cả tên chứa khoảng trống, tab và dòng mới.
find -exec
Khi tùy chọn này được gọi, thì những gì tiếp theo (tối đa \;) được thực thi cho mỗi tệp được tìm thấy. Điều này không thực sự hữu ích trừ khi có một số phương tiện để tham khảo tệp hiện được tìm thấy và đó là những gì {}. Nó có thể được gọi nhiều lần trong chuỗi chạy, ví dụ: sao chép một lựa chọn các tệp vào thư mục sao lưu:
find . ... -exec cp "{}" "/BackUp/{}" \;
Điều này trong findví dụ trên sẽ lần lượt thực thi:
cp "./a" "/BackUp/./a"
cp "./b" "/BackUp/./b"
cp "./c" "/BackUp/./c"
Lưu ý rằng, bên ngoài việc sử dụng chúng trong findlệnh {và }có ý nghĩa đặc biệt trong bash (nhiều lệnh và danh sách mở rộng), nhưng chúng liên quan đến các ký tự khác giữa các dấu ngoặc: chuỗi {}được sao chép theo nghĩa đen, do đó không cần thoát.