Linux/mac 中的 find 指令\*.xml
和之間有什麼差別*.xml
結果:
find . -name \*.xml and find . -name *.xml
是不同的。但為什麼?
另外,是不是locate '*.xml'
比find更好呢?哪一種最常用?
答案1
透過轉義星號,您可以提供要匹配的find
文字字串*.xml
,無論 shell 如何,它都可以在內部將其解析為通配符。如果您未能轉義或引用星號,它會在被find
命令觸及之前被 shell 擴展。
例如,如果您somefile.xml
的目錄中只有一個文件,則 shell 會擴展通配符並將文字字串傳遞somefile.xml
給您的命令。 IE:
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
允許大量選項來優化您的搜尋。