Внутреннее расширение с помощью команды find и подстановочного знака

Внутреннее расширение с помощью команды find и подстановочного знака

Я все еще изучаю командную строку и у меня возникли некоторые трудности с пониманием использования подстановочных знаков в команде find.

Я работаю в каталоге user/temp и использую команду find следующим образом, чтобы найти все файлы .txt:

find . -name *.txt -print

Это дает мне ошибку:

find: unknown primary or operator.

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

Я читал, что нужно экранировать, *чтобы findрасширение выполнялось внутри. Я в замешательстве, потому что думал, что использование одинарных кавычек *заставит командную строку не интерпретировать его как специальный символ, так как же происходит расширение?

решение1

Здесь есть 2 части, которые могут попытаться расширить *: оболочка при ее вызове findили findпри обработке/использовании ее аргументов.

Если вы не заключите его в одинарные кавычки, оболочка расширит его, поэтому, если в текущем каталоге есть a.txt и b.txt, ваша командная строка будет расширена с

find . -name *.txt -print

к

find . -name a.txt b.txt -print

что не является допустимой findкомандой

Если вы заключите его в одинарные кавычки, вы укажете оболочке оставить его в покое, поэтому она findполучит строку *.txtв качестве аргумента -nameи будет использовать ее при сопоставлении потенциальных имен.

решение2

Вы можете попробовать заключить имя файла в двойные кавычки.

найти . -имя "*.txt" -печать

Это работает на моей системе (Debian 8)

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