
Estoy tratando de entender cómo usar find -maxdepth 0
la opción.
Tengo la siguiente estructura de directorios.
--> file1
--> parent
--> child1
--> file1
--> file2
--> child2
--> file1
--> file2
--> file1
Ahora, ejecuto mi find
comando 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,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 0
opción y no pude encontrar ningún ejemplo adecuado.
Mi find
versión es,
find --version
find (GNU findutils) 4.4.2
¿Alguien puede darme algunos consejos sobre qué -maxdepth 0
opció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 file1
en 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.
y file1
se enumeran en la línea de comando y, debido a que file1
coincide -name "file1"
, se devolvió en la salida.
En otras palabras, -maxdepth 0
significa 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 find
comando 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
find
Seguirá 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 maxdepth
valor de 0
, se intentaría hacer coincidir file1
el .
que no coincide.
Sin embargo,pasar *
en lugar de .
en combinación con -maxdepth 0
haría que bash se reemplace *
con una lista de archivos en el directorio actual que devolvería una coincidencia.
Respuesta3
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.