Estoy tratando de entender cómo usar la opción find -maxdepth 0
.
Tengo la siguiente estructura de directorios.
--> file1 --> parent --> child1 --> file1 --> file2 --> child2 --> file1 --> file2 --> file1
Ahora, ejecuto mi comando find
como se muestra a continuación.
find ./parent -maxdepth 0 -name "file1" find ./ -maxdepth 0 -name "file1" find . -maxdepth 0 -name "file1"
Sin ninguno de los find
comandos anteriores, file1 se devuelve.
Desde la página de manual de find
, veo la siguiente información.
-maxdepth 0 significa que solo aplica las pruebas y acciones a los argumentos de la línea de comando.
Busqué algunos ejemplos con la opción -maxdepth 0
y no pude encontrar ningún ejemplo adecuado.
Mi find
versión es,
find --version find (GNU findutils) 4.4.2
¿Alguien puede proporcionarme algunos consejos sobre los casos en que la opción -maxdepth 0
sería útil ?
EDIT
Cuando ejecuto el siguiente comando, obtengo el file1 aparece en la lista dos veces. ¿Está previsto que funcione de esta manera?
find . file1 -maxdepth 1 -name "file1" ./file1 file1
Respuesta
Supongamos que tenemos file1
en el directorio actual. Luego :
$ find . -maxdepth 0 -name "file1" $ find . file1 -maxdepth 0 -name "file1" file1
Ahora, veamos lo que dice la documentación:
-maxdepth 0 significa onl y aplicar las pruebas y acciones a los argumentos de la línea de comandos.
En mi primer ejemplo anterior, solo el directorio .
aparece en la línea de comando. Dado que .
no tiene el nombre file1
, no aparece nada en la salida. En mi segundo ejemplo anterior, tanto .
como file1
se enumeran en la línea de comandos y, porque file1
coincide con -name "file1"
, se devolvió en la salida
En otras palabras, -maxdepth 0
significa hacer no buscar directorios o subdirectorios. En su lugar, busque solo un archivo coincidente entre los que se enumeran explícitamente en la línea de comando.
En sus ejemplos, solo los directorios se enumeraron en la línea de comando y ninguno de ellos se denominó file1
. Por lo tanto, no hay salida.
En general, se pueden nombrar muchos archivos y directorios en la línea de comandos. Por ejemplo, aquí probamos un comando find
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
superposición rutas
Considere:
$ 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, find
seguirá cada ruta especificada en la línea de comando y busque coincidencias incluso si las rutas conducen al mismo archivo, como en . file
o incluso si las rutas son duplicados exactos, como en file1 file1
.
Comentarios
Responde
Si desea buscar archivos de forma no recursiva (no directorios) dentro de un directorio use:
find . -maxdepth 1 -type f -name "file1" # ./file1
-maxdepth 0
no buscará . Solo intentará hacer coincidir los nombres de archivos / directorios que proporcionó como argumentos en find
. P.ej. en la declaración anterior, usando un valor 0
, intentaría hacer coincidir file1
con .
que no coincide. Pasar *
en lugar de .
haría que bash reemplazara *
con la lista de archivos en el directorio actual que devolvería una coincidencia.
find * -maxdepth 0 -name "file1"
. El*
enumerará todos los archivos en el directorio actual en la línea de comando.find
mira cada uno ruta en la línea de comando y los informes coinciden en cada uno, incluso si son duplicados.