Câu trả lời:
Một quả cầu không được trích dẫn sẽ được mở rộng bởi shell trước khi find
được thực thi. (Tham khảo Mở rộng tên tệp trong hướng dẫn.)
Nói như vậy:
find . -name *.pyc -delete
sẽ thực sự thực thi:
find . -name file1.pyc file2.pyc file3.pyc -delete
giả sử có 3 tệp .pyc trong thư mục hiện tại và dẫn đến lỗi thay thế.
Dấu gạch chéo ngược làm cho lớp vỏ vượt qua toàn cầu find
, nghĩa là nó hoạt động như thể *.pyc
được trích dẫn.
Tốt nhất, bạn nên trích dẫn một quả địa cầu:
find . -name '*.pyc' -delete
Trước khi shell của bạn phát find
lệnh, nó sẽ thực hiện các mở rộng khác nhau . Làm như vậy, nó cũng xử lý các ký tự đặc biệt (hoặc, các ký tự có ý nghĩa đặc biệt), trong đó *
ký tự đại diện - ký tự toàn cầu. Đây là cái gọi là mở rộng tên tệp.
Giả sử bạn có hai tệp trong thư mục của mình:
foo.pyc
bar.pyc
Sau đó *.pyc
sẽ mở rộng sang cả hai tên. Vì vậy, nếu bạn viết:
find . -name *.pyc -delete
sau đó shell thực sự sẽ gọi:
find . -name foo.pyc bar.pyc -delete
điều này không có nhiều ý nghĩa, bởi vì bạn chỉ có thể có một đối số cho -name
. Đó là lý do tại sao bạn cần phải thoát khỏi ký tự đặc biệt để ngăn không cho nó bị hiểu bởi vỏ. Bạn làm điều đó bằng cách thoát dấu gạch chéo ngược, hoặc cách khác, trích dẫn nó.
find
nên có một phần được gọiNON-BUGS
với một cái gì đó tương tự như một ví dụ và giải thích lý do tại sao nó cần thiết.