在大多数情况下,ls 似乎会先读取整个目录,然后再生成任何输出 - 通常是因为它需要对输出进行排序或列化。通常这是可以的,但是当从速度较慢的网络服务器读取非常大的目录时,这实际上会导致 ls 挂起。
有没有办法让 ls 在运行过程中打印部分输出?我在 Mac OS X 10.6.8 上尝试了以下操作,但它们似乎不起作用:
ls -lf
ls -1f
万一我想要的不清楚,以下 Perl 脚本大致做了正确的事情:
opendir(DIR, ".") or die "can't opendir $dir: $!";
while($filename = readdir DIR) {
print $filename, "\n";
}
closedir DIR;
... 我只是希望能够使用-l
,-lO
而不必自己编写!
答案1
你的选择是正确的-f
,它可以防止对输出进行排序,但手册页注意到-l
,
如果输出到终端,则会在长列表之前的一行上输出所有文件大小的总和。
您可以stat
通过将输出传输到 来阻止这种求和(这需要首先对目录中的所有文件进行求和)cat
,以防止输出到终端。
我不知道为什么该-1f
表单对您不起作用;它在 GNU ls 上对我来说似乎工作正常。GNU ls 的另一个怪癖(可能不适用于您)是-lf
与 相同-f
,但是是和-fl
的组合(长且无序的列表)。尝试切换某些标志的顺序以确保这对您来说不是问题。-f
-l
答案2
您尝试过寻找吗?
尝试
find . -ls