ls -f 有什么意义(或者,为什么会挂起?)

Wil*_*ell 9 linux ls gnu coreutils

我有一个包含大约 100,000 个文件的目录。ls -f 挂了超过一分钟。我运行了 strace,并立即开始看到 getdents,所以 ls 显然正在读取目录。我还看到很多对 brk 的调用,所以 ls 显然是在内存中缓冲内容。我编写了一个调用 readdir 并输出文件名的简单程序,它立即响应。但是 ls -f 不提供输出。是什么赋予了?我认为 -f 的全部意义在于它导致 ls 除了 readdir 什么都不做。是否有一种可移植、可靠的方法来列出目录的内容?(注意,这是来自 Linux 上 gnu 的 coreutils 的 ls。)

-编辑-

有一个别名,但是“/bin/ls -1f > /dev/null”需要 8 到 15 秒,“/bin/ls -1fx > /dev/null”需要 4 到 11 秒,但是一个简单的程序这只是 readdir 需要 0.011 秒。我需要做什么才能使 gnu ls 不烂?

Dan*_*man 7

重点-f是尽量避免需要统计每个文件条目,并避免需要在显示任何文件之前读取它们。这是一个“元”选项,只是禁用其他选项。

所以,是的,它应该做你期望的。我无法回答为什么不是,但我猜你可能有一个 shell 别名或其他东西,可以向命令插入额外的选项。这可能会重新启用一个功能而不是-f禁用,并且被认为是“更具体的”,所以优先考虑。

  • 唉。ls() { /bin/ls -FB $@; 愚蠢的启动脚本。 (2认同)