Чому зворотний нахил перед зірочкою у `знаходженні '?


9

У цій команді:

find . -name \*.pyc -delete

Для чого потрібен зворотний нахил раніше *.pyc?


Сторінка man для findмає мати розділ, який називається NON-BUGSчимось подібним, як приклад та пояснення того, для чого це потрібно.
Брайан

Відповіді:


19

Некотируваний глобул буде розширений оболонкою до того, як findбуде виконаний. (Зверніться до Розширення назви файлів у посібнику.)

Так сказати:

find . -name *.pyc -delete

насправді буде виконано:

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

припускаючи, що в поточному каталозі було 3 файли .pyc, і натомість виникла помилка.

Зворотний нахил змушує оболонку передавати глобус find, тобто він діє так, ніби *.pycцитується.

В ідеалі вам слід цитувати глобус:

find . -name '*.pyc' -delete

@RamRachum, але більше символів під час набору тексту.
Пол Дрейпер

1
@PaulDraper Зрозумілі та менш схильні до помилок> Коротше одним натисканням клавіші
Doorknob

Одиночні цитати - це шлях. Я ніколи навіть не думав, що ти можеш використати зворотний кут таким чином ...
Флоріс

4

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

Скажімо, у вашому каталозі є два файли:

  • foo.pyc
  • bar.pyc

Потім *.pycбуде розширено на обидва імені. Тож якщо ви пишете:

find . -name *.pyc -delete

тоді оболонка насправді викликатиме:

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

що не має великого сенсу, тому що ви можете мати лише один аргумент -name. Ось чому вам потрібно уникнути спеціального символу, щоб запобігти його інтерпретації оболонкою. Ви робите це шляхом відхилення від косої риски або, цитуючи це, цитуючи це.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.