Respuestas:
Puede canalizar la salida de a findtravés de head:
find . -name '*.txt' | head -n 3
headse inicia y espera la entrada desde el lado izquierdo de la tubería. Luego se findinicia y busca archivos que coincidan con los criterios especificados, enviando su salida a través de la tubería. Cuando headha recibido e impreso el número de líneas solicitadas, finaliza y cierra la tubería. findnota la tubería cerrada y también termina. Simple, elegante y eficiente.
-n 3es compatible con POSIX y, por lo tanto, es probable que sea más portátil.
Esta otra respuesta es algo defectuosa. El comando es
find . -name '*.txt' | head -n 3
Luego hay una explicación en uno de los comentarios [énfasis mío]:
headse inicia y espera la entrada desde el lado izquierdo de la tubería. Luego sefindinicia y busca archivos que coincidan con los criterios especificados, enviando su salida a través de la tubería. Cuandoheadha recibido e impreso el número de líneas solicitadas, finaliza y cierra la tubería.findnota la tubería cerrada y también termina. Simple, elegante y eficiente .
Esto es casi cierto.
El problema es que se findda cuenta de la tubería cerrada solo cuando intenta escribir en ella, en este caso es cuando se encuentra la cuarta coincidencia. Pero si no hay cuarto partido find, continuará. ¡Tu caparazón esperará! Si ocurre en un script, el script esperará, a pesar del hecho de que ya sabemos que la salida de la tubería es final y no se le puede agregar nada. No tan eficiente.
El efecto es insignificante si este particular findtermina rápidamente por sí mismo, pero con una búsqueda compleja en un gran árbol de archivos, el comando puede retrasar innecesariamente lo que quiera hacer a continuación.
La solución no tan perfecta es correr
( find … & ) | head -n 3
De esta manera, cuando headsale, el shell continúa de inmediato. El findproceso en segundo plano puede ser ignorado entonces (saldrá tarde o temprano) o apuntado con pkillo algo.
Para probar el concepto que puede buscar /. Esperamos una sola coincidencia, pero la findbusca en todas partes y puede llevar mucho tiempo.
find / -wholename / 2>/dev/null | head -n 1
Termine con Ctrl+ Ctan pronto como vea el problema. Ahora compara:
pidof find ; ( find / -wholename / 2>/dev/null & ) | head -n 1 ; pidof find
find . -name '*.txt' -print -quitmostrar la primera coincidencia y dejarfindsalir después de la primera coincidencia. No sé si es posible adaptarse al caso "salir después de encontrar n coincidencias".