Ответы:
Глобус без кавычек будет расширен оболочкой перед 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чем-то похожим в качестве примера, и объяснение, почему это необходимо.