我怎样才能让 ls 在运行过程中打印输出?

我怎样才能让 ls 在运行过程中打印输出?

在大多数情况下,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

相关内容