Diferença entre \ *. xml e * .xml no comando find

2

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 quê?

Além disso, é locate '*.xml' melhor que encontrar? Qual deles é o mais comumente usado?

    
por zengr 01.11.2010 / 06:11

1 resposta

5

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.

    
por 01.11.2010 / 06:23

Tags