Ao escapar do asterisco, você está atribuindo find
a string literal *.xml
para corresponder, o que poderia ser analisado como um curinga internamente, independentemente do shell. Se você não conseguir escapar ou citar o asterisco, ele será expandido pelo shell antes de ser tocado pelo comando find
.
Por exemplo, se você tivesse apenas um arquivo somefile.xml
em seu diretório, o shell expandiria o caractere curinga e passaria a string literal somefile.xml
para seu comando. ou seja:
sh-4.1$ find . -name *.xml
seria exatamente equivalente a:
sh-4.1$ find . -name somefile.xml
que corresponde apenas ao nome exato do arquivo. Se você tiver dois arquivos em seu diretório que correspondam ao curinga *.xml
, provavelmente obterá um erro de sintaxe quando o curinga for expandido:
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]
Para saber se locate
é ou não melhor, isso depende do que você está usando. Embora locate
seja muito mais rápido, ele depende de um índice pré-criado, de modo que é tão bom quanto a atualização de índice mais recente (geralmente feita diariamente, mas depende da distribuição). Além disso, ele só retorna resultados com base em correspondências de nomes de arquivos, enquanto find
permite uma infinidade de opções para refinar sua pesquisa.