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

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

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

find . -name *.txt -print 

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

 find: unknown primary or operator. 

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

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

2 Solutions collect form web for “Внутреннее расширение с помощью команды find и символа подстановки”

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

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

 find . -name *.txt -print 

в

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

который не является действительной командой find

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

Вы можете попробовать двойное цитирование имени файла.

найти . -name "* .txt" -print

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

  • Автоматизация ввода текста из сценария bash без использования EOF
  • Найти каталог и скопировать другой каталог в найденный каталог?
  • Что-то запутанное в отношении «su -» и «su»
  • Регулярное изменение / оператор (foo | bar) в GNU или BSD Sed
  • использование sed / awk в переменных сценария bash
  • Что делает `set $ variable`?
  • bash find: получить каталог найденного файла
  • Вывести общие строки (сходства) двух текстовых файлов (напротив diff)?
  • Команда Shell для удаления первой строки, заключенной с косой чертой
  • Как разбить массив в наборе из пяти файлов и загрузить их параллельно?
  • Подстановка Bash с переменной, определенной из шаблона glob
  • Linux и Unix - лучшая ОС в мире.