Как найти файлы со звездочкой в имени файла? Другой способ задать вопрос: как сделать так, чтобы звездочка НЕ вела себя как подстановочный знак?
Обычно для подстановочного знака я бы использовал что-то вроде этого:
$ 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 * )
,