Diferencia entre \*.xml y *.xml en el comando de búsqueda

Diferencia entre \*.xml y *.xml en el comando de búsqueda

¿Cuál es la diferencia entre \*.xmly *.xmlen el comando buscar en Linux/mac?

Los resultados de:

find . -name \*.xml and find . -name *.xmlson diferentes. ¿Pero por qué?

Además, ¿es locate '*.xml'mejor que buscar? ¿Cuál es el más utilizado?

Respuesta1

Al escapar del asterisco, está proporcionando findla cadena literal *.xmlque debe coincidir, que podría analizarse como un comodín internamente independientemente del shell. Si no logra escapar o citar el asterisco, el shell lo expandirá antes de que el findcomando lo toque.

Por ejemplo, si solo tuviera un archivo somefile.xmlen su directorio, el shell expandiría el comodín y pasaría la cadena literal somefile.xmla su comando. es decir:

sh-4.1$ find . -name *.xml

sería exactamente equivalente a:

sh-4.1$ find . -name somefile.xml

que solo coincidiría con ese nombre de archivo exacto. Si tiene dos archivos en su directorio que coinciden con el *.xmlcomodín, probablemente obtendrá un error de sintaxis cuando se expanda el comodín:

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]

En cuanto a si locatees mejor o no, realmente depende de para qué lo estés usando. Aunque locatees mucho más rápido, se basa en un índice prediseñado, por lo que es tan bueno como la actualización del índice más reciente (normalmente se realiza a diario, pero depende de la distribución). Además, solo devuelve resultados basados ​​en coincidencias de nombres de archivos, mientras que findpermite una gran cantidad de opciones para refinar su búsqueda.

información relacionada