如何解决“输出进入管道”溢出?异步管道是否存在?我的命令:“ls -l *.htm | wc -l”失败

如何解决“输出进入管道”溢出?异步管道是否存在?我的命令:“ls -l *.htm | wc -l”失败

我的目录里充满了很多文件。我想知道它们是什么类型的以及它们的数量如此之多。

以下是我尝试一些命令时发生的事件:

ls -l | wc -l
1514340

ls | head -n 4
2004112700001.htm
2004112700002.htm
2004112700003.htm
2004112700004.htm

ls *.xml | head -n 4
20041127.xml
20041225.xml
20050101.xml
20050108.xml

ls -l *.htm | wc -l
bash: /bin/ls: Liste d'arguments trop longue
0

# Any other kind of ls command with *.htm, *.* is failing too.

我知道wc -l必须等待输出ls -l *.htm完全完成才能开始分析它。因为输出太大,所以失败了。

真的是这样吗?

在这种情况下,使ls命令与 结合使用的好方法是什么wc -l?有没有办法wc在输出完全完成之前要求命令异步启动?

答案1

当您尝试使用 rm * 删除目录中的数百万个文件时,也会出现同样的问题。我认为系统正在用它找到的所有文件名“扩展”你的命令......并且负担不起。

我建议使用“查找”来代替,例如

find . -mindepth 1 -maxdepth 1 -name "*.html" | wc -l

相关内容