如何查找文件名中带有星号的文件?提出问题的另一种方式是,如何让星号不充当通配符?
通常对于通配符我会这样:
$ 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 * )
,