cuando uno corre
ls | head
head parece esperar la salida completa del comando canalizado antes de imprimir en la pantalla. Esto no es deseable cuando el comando tarda mucho en ejecutarse, como cuando ejecuta ls en un directorio que contiene millones de archivos.
Sin embargo, cuando uno corre
find | head
head NO espera la salida completa antes de comenzar a imprimir en la pantalla; lo hace en lo que parece ser tiempo real.
Mi pregunta es la siguiente: ¿Cuál es la diferencia entre find y ls que causa esta diferencia en el comportamiento? En segundo lugar, ¿existe un comando de reemplazo (ya sea para ls o para head) que me permita tomar instantáneamente el encabezado de una larga lista de directorios?
Respuesta1
No es head
culpa de él; es ls
's.
ls
casi siempre ordena su salida (de forma predeterminada, por nombre; si se solicita, por fecha). Y está en la naturaleza de cualquier tipo que no pueda producir ningún resultado hasta que haya leído toda la entrada.
find
no clasifica su producción, por lo que puede comenzar a producir más rápido.
Podrías haberlo visto por ti mismo simplemente ejecutando
ls
y
find
y observar la diferencia en el tiempo de respuesta.
Por cierto, puede obtener ls
una lista de directorios sin ordenarlos especificando -U
.