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