linux - 目录中的总行数

标签 linux bash command-line scripting

我有一个包含数千个文件的目录(目前为 100K)。当我使用 wc -l ./* 时,我会得到:

 c1            ./test1.txt
 c2            ./test2.txt
 ...
 cn            ./testn.txt
 c1+c2+...+cn  total

因为目录下有很多文件,所以只想看总数,不看详情。有什么办法吗?

我尝试了几种方法,但出现以下错误:
参数列表太长

最佳答案

如果你想要的只是总行数,那么我建议使用以下命令:

cat * | wc -l

catenates当前工作目录中所有文件的内容,并通过 wc -l 将生成的文本 block 通过管道传输。

我觉得这很优雅。请注意,该命令不会产生无关的输出。

更新:

我没有意识到你的目录包含这么多文件。根据此信息,您应该尝试此命令:

for file in *; do cat "$file"; done | wc -l

大多数人不知道您可以将 for 循环的输出直接传送到另一个命令。

请注意,这可能非常慢。如果您有 100,000 个左右的文件,我猜大概需要 10 分钟。这是一个大胆的猜测,因为它取决于几个我无法检查的参数。

如果您需要更快的东西,您应该用 C 编写您自己的实用程序。如果您使用 pthreads,您可以使它快得惊人。

希望对您有所帮助。

最后说明:

如果您有兴趣构建自定义实用程序,我可以帮助您编写一个。这将是一个很好的练习,其他人可能会发现它很有用。

关于linux - 目录中的总行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47026533/

相关文章:

python - 如何在默认 Python 版本之间动态切换?

node.js - npm 脚本忽略 grep 命令的参数

创建外键时mysql errno 150

parsing - 尝试使用 Golang 在命令行上解析标准输出

c - linux:select的第一个参数

php - yum安装后如何启动php?

linux - Bash - 将命令输出管道化到 while 循环中

linux - 是否可以在嵌套的 heredoc 中进行变量替换?

bash - ImageMagick,Bash 脚本,用于标记注释和图像序列号

command-line - 一个衬里逐 block 提取数据