Поиск файлов, содержащих звездочку (*) в имени файла

Поиск файлов, содержащих звездочку (*) в имени файла

Как найти файлы со звездочкой в ​​имени файла? Другой способ задать вопрос: как сделать так, чтобы звездочка НЕ ​​вела себя как подстановочный знак?

Обычно для подстановочного знака я бы использовал что-то вроде этого:

$ find ./ -type f \( -iname \*.jpg \)

Если я не избегу, то *получу следующее

$ find ./ -type f \( -iname * \)
find: paths must precede expression: .....
find: possible unquoted pattern after predicate `-iname'?

Поскольку ошибка предполагает *необходимость кавычек, я пробовал find ./ -type f \( -iname "*" \)или find ./ -type f \( -iname '*' \), но это также работает как подстановочный знак.

решение1

Похоже, правильным решением будет использование квадратных скобок [ ]. Конечно, я решил это через 5 минут после публикации. Надеюсь, это поможет кому-нибудь в будущем.

$ find . -name '*[*]*' -type f

Хотя можно также использовать обратную косую черту, чтобы экранировать *forfind

$ find . -name '*\**' -type f

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

решение2

Будьте осторожны. То, на что жалуется find(1), — это совсем другое. Допустим, в текущем каталоге у вас есть файлы a, b, c. Если вы вызовете, например:

find ./ -type f \( -iname * \)

что findполучает ./ -type f ( -iname a b c )(shell раскрывает '*' перед передачей ему результирующей командной строки, скобки взяты в кавычки; точно такой же результат для ***). Если вы напишете:

find ./ -type f \( -iname \* \)

он получает ./ -type f ( -iname * ),

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