如何查找檔案名稱中帶有星號的檔案?提出問題的另一種方式是,如何讓星號不充當通配符?
通常對於通配符我會這樣:
$ 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 * )
,