Разница между \*.xml и *.xml в команде find

Разница между \*.xml и *.xml в команде find

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

Результат:

find . -name \*.xml and find . -name *.xmlотличаются. Но почему?

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

решение1

Экранируя звездочку, вы даете 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позволяет использовать множество опций для уточнения поиска.

Связанный контент