3

Я собирался сообщить об ошибке в findutils на gnu.org, когда увидел уведомление, в котором меня спрашивали, знаю ли я разницу между этими двумя командами:

find -name *.c    

а также

find -name "*.c"

Я использую команду find довольно часто, но я не думаю, что эти два имеют какое-либо различие. Так что мне любопытно, я ошибаюсь или это просто парни из GNU шутят?

2 ответа2

11

В первом примере ваша оболочка сначала развернет файл *.c чтобы он соответствовал всем файлам в текущем каталоге, оканчивающимся на .c .

Итак, если в вашем каталоге есть one.c , zwei.c и tres.c , ваша оболочка расширит это до

find . -name one.c zwei.c tres.c

и find , вероятно, запутается, потому что вы передаете пару дополнительных аргументов после -name one.c - zwei.c и tres.c не считаются частью того, что вы ищете с -name .

Во втором примере вы передаете буквенную строку *.c в опцию -name команды find . Это то, что find знает, как иметь дело - и, вероятно, то, что вы ищете.

Альтернативный способ сделать то же самое было бы с помощью обратной косой черты:

find . -name \*.c

(Заметим также , что ваши примеры нужен аргумент , чтобы сказать , где find , чтобы начать поиск. Это часто просто . указать текущий каталог.)

2

Первый из них приведет только к *.c если у вас нет файлов, соответствующих этому в текущем каталоге, в противном случае он расширится до этих имен файлов. Последнее всегда приводит к тексту *.c .

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