¿Por qué el punto en los comandos de búsqueda?

14

Por lo general, uno ve findcomandos que se ven así:

$ find . -name foo.txt

cuando la búsqueda debe comenzar desde el directorio actual. Estoy descubriendo que en mis máquinas (Ubuntu, Cygwin) obtengo los mismos resultados sin el punto.

¿Por qué se incluye típicamente? ¿Es solo una convención ser explícito, o fue / es requerido en ciertos sistemas?

Eric Wilson
fuente

Respuestas:

27

Algunas versiones * de findrequieren que proporcione un argumento de ruta que es un directorio desde el cual comenzar a buscar. Dot .simplemente representa el directorio actual en el que generalmente desea buscar.

Puede reemplazar esto con cualquier ruta que desee que sea la base de la búsqueda. En algunas versiones de find, esto se puede dejar porque el directorio actual está implícito si no hay ningún argumento de ruta presente.

Puede ejecutar man findsu shell para obtener detalles sobre los argumentos. Por ejemplo, la sinopsis de uso para la mía indica que el argumento de la ruta es opcional (dentro del corchete cuadrado []):

   find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

Si ejecutó my findsin argumentos en absoluto, se devolverían todos los archivos y directorios que comiencen desde la carpeta actual. Su ejemplo simplemente declara expresamente que la búsqueda debe comenzar .e incluye la expresión -name foo.txtcomo uno de los filtros de búsqueda.

* Notablemente todas las variantes BSD y cualquier cosa que se apegue estrictamente al estándar POSIX . GNU find le permite ser opcional.

Caleb
fuente
1
¿Sabes de antemano qué versiones de find requieren esto? ¿O dónde podría buscar para investigar más? (encontrar es difícil de google)
Eric Wilson
Lo interesante de la ruta de búsqueda predeterminada.
rozcietrzewiacz
2
Creo que la mayoría de las variantes de búsqueda de BSD requieren un argumento de ruta, mientras que en GNU encontrar es opcional. Pueden existir variaciones.
Caleb
2
Tenga en cuenta que, al menos, en las especificaciones estándar POSIX 2008, pathes un argumento obligatorio para encontrar .
Caleb
1
Nit recoger: “Se podría reemplazar esta [punto] con cualquier ruta que desea” → “ningún caminos que desee”, ya que se puede decir find dir1 dir2 dir3 -name foo.txt.
G-Man dice 'Restablecer a Monica' el
5

La versión AIX de find, por ejemplo, requiere la ruta y no se ejecutará si no se proporciona una.

# oslevel -s
5300-08-03-0831
# find -name bob
Usage: find [-H | -L] Path-list [Expression-list]

# oslevel -s
6100-03-01-0921
# find -name bob
Usage: find [-H | -L] Path-list [Expression-list]

Aunque algunas máquinas AIX pueden tener un GNU find instalado, que puede hacer frente sin la ruta,

# oslevel -s
6100-03-01-0921
# /opt/freeware/bin/find -version
GNU find version 4.1
OchoBitTony
fuente