擅长:python、mysql、java
<p><code>ls</code>为每个文件执行一个<code>stat(2)</code>调用。其他工具,如<code>find(1)</code>和shell通配符扩展,可能会避免此调用,只需执行<code>readdir</code>。一个可以工作的shell命令组合是<code>find dir -maxdepth 1|wc -l</code>,但是它很乐意列出目录本身,并错误地计算任何包含新行的文件名。</p>
<p>从Python中,直接获得这些名称的方法是<a href="http://docs.python.org/library/os.html#os.listdir" rel="nofollow">os.listdir(directory)</a>。与os.walk和os.path.walk不同,它不需要递归、检查文件类型或进一步调用Python函数。</p>
<p>补遗:看起来ls并不总是stat。至少在我的GNU系统上,它只能在不请求进一步信息(例如哪些名称是目录)时执行getdents调用。getdents是用于在GNU/Linux中实现readdir的底层系统调用。</p>
<p>附加2:ls输出结果之前出现延迟的一个原因是它排序和制表。ls-U1可以避免这个。</p>