find -max Depth 0 no me devuelve ningún resultado

find -max Depth 0 no me devuelve ningún resultado

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

Tengo la siguiente estructura de directorios.

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

Ahora, ejecuto mi findcomando 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 findcomandos anteriores,archivo1se devuelve.

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

-max Depth 0 significa aplicar solo las pruebas y acciones a los argumentos de la línea de comando.

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

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

EDITAR

Cuando ejecuto el siguiente comando, obtengo elarchivo1aparecer en la lista dos veces. ¿Se pretende que esto funcione de esta manera?

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

Respuesta1

Supongamos que tenemos file1en el directorio actual. Entonces:

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

Ahora, veamos quéla documentaciónestados:

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

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

En otras palabras, -maxdepth 0significa hacernobuscar directorios o subdirectorios. En su lugar, busque únicamente un archivo coincidente entre los que aparecen explícitamente en la línea de comando.

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

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

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 -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

findSeguirá cada ruta especificada en la línea de comando y buscará coincidencias incluso si las rutas conducen al mismo archivo, como en . file, o incluso si las rutas son duplicados exactos, como en file1 file1.

Respuesta2

Si desea buscar archivos (no directorios) de forma no recursiva dentro de un directorio, utilice:

find . -maxdepth 1 -type f -name "file1"
# ./file1

-maxdepth 0 no buscará. Solo intentará hacer coincidir los nombres de archivos/directorios que haya proporcionado como argumentos en find.

Por ejemplo, en la declaración anterior, al usar un maxdepthvalor de 0, se intentaría hacer coincidir file1el .que no coincide.

Sin embargo,pasar *en lugar de .en combinación con -maxdepth 0haría que bash se reemplace *con una lista de archivos en el directorio actual que devolvería una coincidencia.

Respuesta3

Uso:

John1024 dio buenos ejemplos,cómopara usar -maxdepth 0, por lo que solo agrego información decuandopara usarlo:

Bueno, ¿a qué se debe -maxdepth 0? Si conoce el nombre, puede simplemente emitir el comando

ls file-* 

Bueno, puede que no sea el nombre lo que estás buscando.

Ejemplo:

touch file-{1..3}
echo "1" > file-1
touch -d @0 file-2

find * -maxdepth 0 -name "file-*" \( -size 1k -o -mtime +10000 \) -ls 
   669266     12 -rw-rw-r--   1 stefan   stefan          2 Mai  4 20:57 file-1
   669270      8 -rw-rw-r--   1 stefan   stefan          0 Jan  1  1970 file-2

Creo 3 archivos con el nombre patrón archivo-*. Luego agrego algo de contenido al no. 1, restablecer la fecha para el no. 2 y dejar no. 3 tal cual.

Ahora busco archivos de 1k (n.º 1) o de edad> aproximadamente 30 años en quizás miles de archivos. Por ejemplo, sólo entre 3 archivos.

Pero find * busca cada archivo en el directorio actual, de ahí la jerga un tanto extraña de la página de manual, de "punto de partida" en lugar de hablar simplemente de directorios. Supongo que las potentes funciones de filtro de find habían llevado a la decisión de buscar archivos, de los cuales sabes dónde están ubicados (el $PWD), pero no puedes filtrar fácilmente otros atributos con las herramientas de shell estándar.

información relacionada