将查找输出作为参数传递时出现“参数列表过长”错误

问题描述

我在一个目录下有大约500万个文本文件-都是相同的格式(没什么特别的,只是纯文本文件,每行都有一些整数)。我想计算所有这些文件中的最大和最小行数,以及两个文件名(一个用于最大,另一个用于最小)。

我首先尝试像这样写出所有行数(然后尝试如何从此列表中找到最小值和最大值):

wc -l `find /some/data/dir/with/text/files/ -type f` > report.txt

但这会引发一个错误

bash:/ usr / bin / wc:参数列表太长

也许有更好的方法可以解决这个问题?

解决方法

参数列表的长度为limit。由于您有数百万个文件传递给wc,因此命令肯定会越过这一行。

最好调用find -exec COMMAND

find /some/data/dir/with/text/files/ -type f -exec wc -l {} + > report.txt

在这里,每个找到的文件find将附加在-exec之后的命令的参数列表中,以代替{}。在达到参数长度之前,将运行该命令,并且将以相同的方式在命令的新运行中处理其余找到的文件,直到完成整个列表为止。

有关详情,请参见find中的man page


感谢Charles Duffy对该答案的改进。