Tengo un directorio con aproximadamente 100,000 archivos en él. ls -f se cuelga por más de un minuto. Corrí strace e inmediatamente comencé a ver getdents, por lo que ls claramente está leyendo el directorio. También veo muchas llamadas a brk, por lo que ls claramente está guardando cosas en la memoria intermedia. Escribí un programa simple que llama a readdir y genera nombres de archivos, y responde de inmediato. Pero ls -f no proporciona salida. ¿Lo que da? Pensé que el punto de -f es que hace que ls no haga nada más que readdir. ¿Existe una forma portátil y confiable de enumerar el contenido de un directorio? (Tenga en cuenta que esto es ls de coreutils de gnu en Linux).
-EDITAR-
Había un alias en su lugar, pero "/ bin / ls -1f> / dev / null" toma de 8 a 15 segundos, "/ bin / ls -1fx> / dev / null" toma de 4 a 11 segundos, pero un programa simple eso solo readdir toma 0.011 segundos. ¿Qué necesito hacer para que gnu ls no sea una mierda?
Se agregó una optimización en coreutils 7.0 (commit 8d974b00fbbc2025de63e1e6d54827648fefa1c4):
La primera explicación que viene a la mente es que está ejecutando una versión anterior de coreutils. Necesitas actualizar.
fuente