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