Понимание ошибки «Пути должны предшествовать выражению» в команде поиска

Убунту 7

Команда find — это мощный инструмент в системах Unix и Linux, используемый для поиска и определения местоположения списка файлов и каталогов на основе условий, которые вы указываете для файлов, соответствующих аргументам. Однако иногда он может выдавать ошибку, в которой говорится, что «пути должны предшествовать выражению». В этой статье объясняется, что означает эта ошибка, почему она возникает и как ее исправить.

Ошибка «пути должны предшествовать выражению» в команде поиска возникает, когда путь не указан перед выражением. Чтобы исправить эту ошибку, вам нужно заключить выражение в кавычки или экранировать подстановочный знак *.

Команда поиска

Прежде чем мы углубимся в ошибку, давайте сначала разберемся с командой find. Синтаксис команды поиска следующий:

находить [path…] [expression]

  • path… : Здесь вы указываете каталог, с которого нужно начать поиск. . представляет текущий каталог, а / представляет корневой каталог.
  • выражение : это критерии поиска. Это может быть -name, -size, -type и т. д., за которыми следует соответствующее значение.

Например, чтобы найти все файлы .txt в текущем каталоге, вы должны использовать:

находить . -имя “*.txt”

Ошибка «Пути должны предшествовать выражению»

Ошибка «пути должны предшествовать выражению» возникает, когда путь не указан перед выражением. Это распространенная ошибка при использовании команды find.

Например, если вы запустите команду find . -name *.bak, оболочка расширяет часть *.bak, прежде чем передать ее для поиска. Это означает, что оболочка заменяет *.bak списком всех файлов в текущем каталоге, разделенных пробелами, которые соответствуют шаблону.

Таким образом, если в текущем каталоге есть три файла, оканчивающиеся на .bak (met.bak, tem.bak и cdIndex1-60), команда становится find . -name met.bak tem.bak cdIndex1-60. Это не предполагаемое поведение.

Исправление ошибки

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

$ найти . -имя ‘*.бак’

или

$ найти . -имя “*.bak”

Кроме того, вы можете избежать подстановочного знака *, используя обратную косую черту:

$ найти . -имя \*.бак

Используя кавычки или экранируя подстановочный знак, вы гарантируете, что выражение будет передано для поиска как есть, без какого-либо расширения со стороны оболочки. Таким образом, find будет корректно искать файлы с расширением .bak по указанным путям.

Заключение

Ошибка «пути должны предшествовать выражению» в команде поиска — распространенная ошибка, которую легко исправить. Всегда не забывайте заключать выражение в кавычки или экранировать подстановочный знак, чтобы предотвратить расширение оболочки. Таким образом, вы можете эффективно использовать команду find и избежать этой ошибки.

Для получения дополнительной информации о команде find и ее использовании вы можете проверить справочная страница. Он содержит подробное объяснение команды find и ее параметров.

Команда find используется для поиска и обнаружения файлов и каталогов на основе заданных условий или критериев.

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

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

Да, вы можете использовать одинарные или двойные кавычки, чтобы заключить выражение в команде поиска. Оба варианта предотвратят расширение оболочки.

Да, есть несколько опций и условий, которые можно использовать с командой find. Некоторые распространенные из них включают -name, -type, -size, -mtime и т. д. Вы можете обратиться к справочной странице команды find для получения полного списка параметров и их использования.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *