
Я все еще изучаю командную строку и у меня возникли некоторые трудности с пониманием использования подстановочных знаков в команде 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)