El cabezal espera la entrada estándar completa antes de imprimir

El cabezal espera la entrada estándar completa antes de imprimir

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 headculpa de él; es ls's.  lscasi 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.  findno 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 lsuna lista de directorios sin ordenarlos especificando -U.

información relacionada