題 find命令中\ * .xml和* .xml之間的區別


有什麼區別 \*.xml 和 *.xml 在Linux / mac中的find命令中

結果:

find . -name \*.xml and find . -name *.xml 是不同的。但為什麼?

也是 locate '*.xml' 比找到更好?哪一個最常用?


2
2017-11-01 05:11


起源




答案:


通過逃避星號,你給予了 find 文字字符串 *.xml 匹配,它可以在內部解析為通配符而不管shell。如果你沒有逃脫或引用星號,它將被外殼擴展,然後被觸及 find 命令。

例如,如果您只有一個文件 somefile.xml 在您的目錄中,shell將展開通配符並傳遞文字字符串 somefile.xml 對你的命令。即:

sh-4.1$ find . -name *.xml

將完全等同於:

sh-4.1$ find . -name somefile.xml

這只會匹配那個確切的文件名。如果您的目錄中有兩個匹配的文件 *.xml 通配符,當通配符擴展時,您可能會收到語法錯誤:

sh-4.1$ find . -name somefile.xml someotherfile.xml
find: paths must precede expression: someotherfile.xml
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

至於是否 locate 更好,這實際上取決於你使用它。雖然 locate 更快,它依賴於預先建立的索引,因此它只能與最新的索引更新一樣好(通常每天都會完成,但這取決於發行版)。此外,它僅返回基於文件名匹配的結果,而 find 允許大量選項來優化您的搜索。


5
2017-11-01 05:23