Find, ls et perl testés contre 40 000 fichiers : même vitesse (bien que je n'aie pas essayé de vider le cache) :
[user@server logs]$ time find . | wc -l
42917
real 0m0.054s
user 0m0.018s
sys 0m0.040s
[user@server logs]$ time /bin/ls -f | wc -l
42918
real 0m0.059s
user 0m0.027s
sys 0m0.037s
et avec perl opendir/readdir, même temps :
[user@server logs]$ time perl -e 'opendir D, "."; @files = readdir D; closedir D; print scalar(@files)."\n"'
42918
real 0m0.057s
user 0m0.024s
sys 0m0.033s
note : J'ai utilisé /bin/ls -f pour être sûr de contourner l'option alias qui pourrait ralentit un peu et -f pour éviter le classement des fichiers. ls sans -f est deux fois plus lent que find/perl sauf si ls est utilisé avec -f, cela semble être le même temps :
[user@server logs]$ time /bin/ls . | wc -l
42916
real 0m0.109s
user 0m0.070s
sys 0m0.044s
J'aimerais aussi avoir un script pour demander directement au système de fichiers sans toutes les informations inutiles.
tests basés sur les réponses de Peter van der Heijden, glenn jackman et mark4o.
Thomas