find指令中\*.xml和*.xml的差別

find指令中\*.xml和*.xml的差別

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允許大量選項來優化您的搜尋。

相關內容