Qual é a diferença entre \*.xml
e *.xml
no comando find no Linux/mac
Os resultados de:
find . -name \*.xml and find . -name *.xml
são diferentes. Mas por que?
Além disso, é locate '*.xml'
melhor do que encontrar? Qual é o mais comumente usado?
Responder1
Ao escapar do asterisco, você fornece find
a string literal *.xml
correspondente, que pode ser analisada 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 find
comando.
Por exemplo, se você tivesse apenas um arquivo somefile.xml
em seu diretório, o shell expandiria o curinga e passaria a string literal somefile.xml
para o seu comando. ou seja:
sh-4.1$ find . -name *.xml
seria exatamente equivalente a:
sh-4.1$ find . -name somefile.xml
que corresponderia apenas ao nome exato do arquivo. Se você tiver dois arquivos em seu diretório que correspondam ao *.xml
curinga, provavelmente receberá 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]
Quanto a ser locate
melhor ou não, isso realmente depende da finalidade para a qual você o está usando. Embora locate
seja muito mais rápido, ele depende de um índice pré-construído, por isso é tão bom quanto a atualização mais recente do índice (geralmente feita diariamente, mas isso depende da distribuição). Além disso, ele retorna apenas resultados com base nas correspondências de nomes de arquivos, ao mesmo tempo que find
permite uma infinidade de opções para refinar sua pesquisa.