9

В этой команде:

find . -name \*.pyc -delete

Зачем нужна обратная косая черта перед *.pyc ?

2 ответа2

19

Глобус без кавычек будет расширен оболочкой перед выполнением find . (См. Расширение имени файла в руководстве.)

Сказав так:

find . -name *.pyc -delete

будет на самом деле выполнить:

find . -name file1.pyc file2.pyc file3.pyc -delete

при условии, что в текущем каталоге было 3 файла .pyc, что привело к ошибке.

Обратная косая черта заставляет оболочку передавать глобус, чтобы find , то есть она действует так, как если бы *.pyc был заключен в кавычки.

В идеале вы должны цитировать глобус:

find . -name '*.pyc' -delete
4

Прежде чем ваша оболочка выполнит команду find , она выполнит различные расширения. При этом он также обрабатывает специальные символы (или символы со специальным значением), где * - это подстановочный знак - символ-заглушка. Это так называемое расширение имени файла.

Скажем, у вас есть два файла в вашем каталоге:

  • foo.pyc
  • bar.pyc

Тогда *.pyc расширится до обоих имен. Так что если вы напишите:

find . -name *.pyc -delete

тогда оболочка на самом деле вызовет:

find . -name foo.pyc bar.pyc -delete

что не имеет большого смысла, потому что вы можете иметь только один аргумент для -name . Вот почему вам нужно экранировать специальный символ, чтобы не допустить его интерпретации оболочкой. Вы делаете это путем экранирования обратной косой черты или, в качестве альтернативы, цитируя его.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .