find -maxdepth 0 no me devuelve ninguna salida

17

Estoy tratando de entender cómo usar find -maxdepth 0la opción.

Tengo la estructura de directorios a continuación.

--> file1
--> parent
          --> child1
                   --> file1
                   --> file2
          --> child2
                   --> file1
                   --> file2
          --> file1

Ahora, ejecuto mi findcomando de la siguiente manera.

find ./parent -maxdepth 0 -name "file1"
find ./ -maxdepth 0 -name "file1"
find . -maxdepth 0 -name "file1"

Con ninguno de los anteriores findcomandos, fichero1 se volvió.

Desde la página de manual de find, veo la siguiente información.

-maxdepth 0 significa solo aplicar las pruebas y acciones a los argumentos de la línea de comandos.

Busqué algunos ejemplos con -maxdepth 0opción y no pude encontrar ningún ejemplo adecuado.

Mi findversión es

find --version
find (GNU findutils) 4.4.2

¿Puede alguien darme algunos consejos sobre qué -maxdepth 0opción de casos sería útil?

EDITAR

Cuando ejecuto el siguiente comando, obtengo el archivo1 que aparece dos veces. ¿Se pretende que funcione de esta manera?

find . file1 -maxdepth 1 -name "file1"
./file1
file1
Ramesh
fuente

Respuestas:

24

Supongamos que tenemos file1en el directorio actual. Luego:

$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1

Ahora, veamos qué dice la documentación:

-maxdepth 0 significa que sólo se aplican las pruebas y las acciones de los argumentos de línea de comandos.

En mi primer ejemplo anterior, solo el directorio .aparece en la línea de comando. Como .no tiene el nombre file1, no aparece nada en la salida. En mi segundo ejemplo anterior, ambos .y file1se enumeran en la línea de comando y, debido a que file1coincide -name "file1", se devolvió en la salida

En otras palabras, -maxdepth 0los medios de hacerlo no buscar en los directorios o subdirectorios. En su lugar, solo busque un archivo coincidente entre los que se enumeran explícitamente en la línea de comando.

En sus ejemplos, solo se enumeraron los directorios en la línea de comando y ninguno de ellos fue nombrado file1. Por lo tanto, no hay salida.

En general, muchos archivos y directorios se pueden nombrar en la línea de comando. Por ejemplo, aquí intentamos un findcomando con 11 archivos y directorios en la línea de comando:

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 -maxdepth 0 -name "file1"
file1

Caminos superpuestos

Considerar:

$ find . file1 -maxdepth 0 -iname file1
file1
$ find . file1 file1 -maxdepth 0 -iname file1
file1
file1
$ find . file1 file1 -maxdepth 1 -iname file1
./file1
file1
file1

Aparentemente, como señala Ramesh, findseguirá cada ruta especificada en la línea de comando y buscará coincidencias incluso si las rutas conducen al mismo archivo, como en . fileo incluso si las rutas son duplicados exactos, como en file1 file1.

John1024
fuente
Gracias. Pero, ¿cómo podría pasar algunos nombres de archivo en la línea de comandos?
Ramesh
Buen punto. Ver mi respuesta actualizada. Puede poner tantos como desee antes de la primera prueba. Por ejemplo find * -maxdepth 0 -name "file1". La *lista mostrará todos los archivos en el directorio actual en la línea de comando.
John1024
1
@Ramesh Respuesta actualizada nuevamente con, espero, una mejor explicación y ejemplos.
John1024
gracias de nuevo. Actualicé mi pregunta con más detalles de su última actualización.
Ramesh
@Ramesh No puedo encontrarlo documentado, pero veo el mismo comportamiento que usted: findmira cada ruta en la línea de comando e informa las coincidencias en cada una, incluso si son duplicados.
John1024