J'ai un répertoire contenant environ 100 000 fichiers. ls -f se bloque pendant plus d'une minute. J'ai couru strace et j'ai immédiatement commencé à voir getdents, donc ls lit clairement le répertoire. Je vois également beaucoup d'appels à brk, donc ls met clairement les choses en mémoire. J'ai écrit un programme simple qui appelle readdir et génère des noms de fichiers, et il répond immédiatement. Mais ls -f ne fournit pas de sortie. Ce qui donne? Je pensais que tout l'intérêt de -f est que ls ne fait rien de plus que readdir. Existe-t-il un moyen portable et fiable de répertorier le contenu d'un répertoire? (Remarque, ceci est ls des coreutils de gnu sur Linux.)
-ÉDITER-
Il y avait un alias en place, mais "/ bin / ls -1f> / dev / null" prend 8 à 15 secondes, "/ bin / ls -1fx> / dev / null" prend 4 à 11 secondes, mais un programme simple cela ne fait que readdir prend 0,011 seconde. Que dois-je faire pour que les gnous ne sucent pas?
Une optimisation a été ajoutée dans coreutils 7.0 (commit 8d974b00fbbc2025de63e1e6d54827648fefa1c4):
La première explication qui me vient à l'esprit est que vous utilisez une ancienne version de coreutils. Vous devez mettre à niveau.
la source