¿Cuál es la diferencia entre \*.xml
y *.xml
en el comando buscar en Linux/mac?
Los resultados de:
find . -name \*.xml and find . -name *.xml
son 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 find
la cadena literal *.xml
que 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 find
comando lo toque.
Por ejemplo, si solo tuviera un archivo somefile.xml
en su directorio, el shell expandiría el comodín y pasaría la cadena literal somefile.xml
a 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 *.xml
comodí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 locate
es mejor o no, realmente depende de para qué lo estés usando. Aunque locate
es 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 find
permite una gran cantidad de opciones para refinar su búsqueda.