有没有办法限制命令上列出的文件的数量ls
?
我见过:
ls | head -4
但要获取head
或tail
执行,我需要等待ls
完成执行,并且目录中包含大量文件,这可能需要相当长的时间。
我希望执行一个ls
限制命令而不使用该head
命令。
答案1
你有没有尝试过
ls -U | head -4
这应该跳过排序,这可能就是ls
花费这么长时间的原因。
答案2
如果您的版本ls
有不对文件进行排序的方法,例如-U
对于 GNU ls, 用它。如果没有选项,ls
将首先读取所有文件,然后对名称进行排序,然后开始打印。
另一种可能性是运行find
,它会在找到名称时打印名称。
find . -name . -o -prune | head
(请注意,由于head
正在致力于线,假设文件名不包含换行符)。
答案3
也许您需要除 之外的工具ls
?
例如,Randal Schwartz 有一篇关于perl
在大型目录上使用其中可能包含一些有关构建满足您需求的东西的提示。
Randal 在博客文章中解释说,两者ls
都find
尝试在打印任何目录条目之前读取所有目录条目,而perl
他提出的解决方案则不然。
答案4
在一个不相关的注释中(因为当您搜索“linux树限制文件数量作为输出”时出现这个问题),您可以使用tree --filelimit=10
(下降仅存在10个或更少文件的目录)。它很好地为您提供了如下输出
tree --filelimit=10
它列出了目录结构和内容。在探索大型数据集时非常有用(当您第一次对了解结构/层次结构感兴趣时)。
.
├── gps
│ ├── gps.csv
│ └── ins.csv
├── mono_rear [2217 entries exceeds filelimit, not opening dir]
├── mono_rear.timestamps
├── stereo
│ └── centre [3164 entries exceeds filelimit, not opening dir]
└── stereo.timestamps