如何限制ls打印的文件数量?

And*_*rao 147 command-line ls limit

有没有办法限制ls命令上列出的文件数量?

我见过:

ls | head -4
Run Code Online (Sandbox Code Playgroud)

但是要获得head或被tail执行,我需要等待ls完成执行,并且目录中的文件数量巨大,可能需要相当长的时间。

我希望在ls不使用该head命令的情况下执行一个限制命令。

小智 176

你有没有尝试过

ls -U | head -4
Run Code Online (Sandbox Code Playgroud)

这应该跳过排序,这可能是为什么ls要花这么长时间。

/sf/ask/2813541/

  • @AndreDurao,GNU `ls -U` 不一定在打印前读取整个目录。例如,尝试在大目录中使用 `strace -e getdents,write ls -U > /dev/null`。 (6认同)
  • “ls -U”在打印之前仍然读取整个目录...我想我会编写一个小脚本来限制文件,但是该问题链接是很好的阅读材料。谢谢尼科。 (2认同)
  • 请注意:如果您想在 OSX 上执行 strace,请查找 dtrace,strace 命令是一个 Linux 实用程序 (2认同)

Gil*_*il' 16

如果您的版本ls有一种不对文件进行排序的方法,例如-U对于 GNU ls,请使用它。如果没有选项,ls将首先读取所有文件,然后对名称进行排序,然后开始打印。

另一种可能性是 run find,它会在找到名称时打印名称。

find . -name . -o -prune | head
Run Code Online (Sandbox Code Playgroud)

(请注意,由于head正在处理,因此假定文件名不包含换行符)。


AFr*_*sh1 5

也许您需要除ls? 之外的其他工具?

例如,Randal Schwartz 有一篇关于在大型目录使用perl的博客条目,其中可能包含有关构建满足您需求的内容的一些提示。

在博客中解释兰德尔既lsfind试图在所有目录条目读取打印任何之前,而perl他提出的解决方案不。