2

В чем разница между \*.xml и *.xml в команде find в Linux/mac

Результат:

find . -name \*.xml and find . -name *.xml разные. Но почему?

Кроме того, locate '*.xml' лучше, чем найти? Какой из них наиболее часто используется?

1 ответ1

5

Избегая звездочки, вы даете возможность find литеральную строку *.xml для сопоставления, которую он может внутренне анализировать как подстановочный знак независимо от оболочки. Если вам не удастся экранировать звездочку или заключить ее в кавычки, она будет развернута оболочкой, прежде чем ее вообще коснется команда find .

Например, если в вашем каталоге был только один файл somefile.xml , оболочка расширила бы подстановочный знак и передала литеральную строку somefile.xml в вашу команду. то есть:

sh-4.1$ find . -name *.xml

будет в точности эквивалентно:

sh-4.1$ find . -name somefile.xml

который будет соответствовать только этому точному имени файла. Если в вашем каталоге есть два файла, которые совпадают с подстановочным знаком *.xml , вы, вероятно, получите синтаксическую ошибку при расширении подстановочного знака:

sh-4.1$ find . -name somefile.xml someotherfile.xml
find: paths must precede expression: someotherfile.xml
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

Что касается того, лучше ли locate , это действительно зависит от того, для чего вы его используете. Несмотря на то, что locate происходит намного быстрее, оно опирается на предварительно созданный индекс, поэтому оно так же хорошо, как и самое последнее обновление индекса (обычно выполняется ежедневно, но это зависит от дистрибутива). Кроме того, он возвращает только результаты, основанные на совпадениях с именами файлов, тогда как find позволяет использовать множество параметров для уточнения поиска.

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