微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我在一个目录下有大约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对该答案的改进。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。