Відповіді:
Некотируваний глобул буде розширений оболонкою до того, як findбуде виконаний. (Зверніться до Розширення назви файлів у посібнику.)
Так сказати:
find . -name *.pyc -delete
насправді буде виконано:
find . -name file1.pyc file2.pyc file3.pyc -delete
припускаючи, що в поточному каталозі було 3 файли .pyc, і натомість виникла помилка.
Зворотний нахил змушує оболонку передавати глобус find, тобто він діє так, ніби *.pycцитується.
В ідеалі вам слід цитувати глобус:
find . -name '*.pyc' -delete
Перед тим, як ваша оболонка findвидасть команду, вона зробить різні розширення . Роблячи це, він також обробляє спеціальні символи (або, символи зі спеціальним значенням), де *є символом підстановки - символом глобуса. Це так зване розширення імені файлів.
Скажімо, у вашому каталозі є два файли:
foo.pycbar.pycПотім *.pycбуде розширено на обидва імені. Тож якщо ви пишете:
find . -name *.pyc -delete
тоді оболонка насправді викликатиме:
find . -name foo.pyc bar.pyc -delete
що не має великого сенсу, тому що ви можете мати лише один аргумент -name. Ось чому вам потрібно уникнути спеціального символу, щоб запобігти його інтерпретації оболонкою. Ви робите це шляхом відхилення від косої риски або, цитуючи це, цитуючи це.
findмає мати розділ, який називаєтьсяNON-BUGSчимось подібним, як приклад та пояснення того, для чого це потрібно.