Linux 怎么查询巨量文件的精确数量?

2020-11-04 10:32:37 +08:00
 frmongo
linux 一个文件夹里有大概接近 2000 万个文件(没有子文件夹)。
使用 ls . | wc -l 这个命令执行查询数量会内存耗尽,有没有办法能精确查询文件数量呢?
2909 次点击
所在节点    程序员
22 条回复
lxk11153
2020-11-04 10:38:03 +08:00
可以放这么多吗?[doge]
yuanbo6
2020-11-04 10:40:18 +08:00
惊了
cydian
2020-11-04 10:41:22 +08:00
可以放这么多,inode 够用就行
slimhigh
2020-11-04 10:41:34 +08:00
自己写个程序遍历文件夹。
Osk
2020-11-04 10:42:13 +08:00
没有实战过, 不过可以考虑这些方法优化:

ls 命令本身会进行排序, 文件数目多时可能会很慢. 使用 `ls -U` 不排序来提升第一个命令的动作.

把 ls 的输出重定向到文件中, 而不是管道, 后续再用其他工具处理?
sonice
2020-11-04 10:42:47 +08:00
egen
2020-11-04 10:43:14 +08:00
ls -f1 | wc -l
acmore
2020-11-04 10:43:22 +08:00
locate -cr 'path_to_your_folder'
qinlou
2020-11-04 10:43:34 +08:00
find . | wc -l 或者 find . >count.file; wc -l file
novanul
2020-11-04 10:43:44 +08:00
sudo updatedb && locate --regex ^$(pwd) | wc -l 不知道可不可以
Liutos
2020-11-04 10:48:54 +08:00
用 ls -f 试试,可以让输出的内容不排序,这样可以不用将所有文件名先读入内存。
frmongo
2020-11-04 10:49:58 +08:00
@Osk #5 查询了一下 ls -U 重定向到 txt 文件,没有报错,生成的 txt 文件有 266M
frmongo
2020-11-04 10:56:07 +08:00
@Osk #5 我用这个命令生成了一个名字,然后拿到 win 下用 notepad++查看了行数作为文件数量是 1 千 8 百万个文件

ls -U dir_name >lst.txt
frmongo
2020-11-04 11:02:35 +08:00
或者用这个:
ls -U dir_name >lst.txt
wc -l lst.txt
frmongo
2020-11-04 11:04:03 +08:00
ls -U dir_name/ | wc -l 也可以
nuk
2020-11-04 11:12:37 +08:00
mingl0280
2020-11-04 11:52:04 +08:00
ls -f | wc -l
find . -name "*" | wc -l
mingl0280
2020-11-04 11:52:59 +08:00
备注一下,可能有些系统有 locate,locate -c 就行
dorothyREN
2020-11-04 14:23:35 +08:00
ls -l > a && wc -l a
ungrown
2020-11-04 16:00:58 +08:00
用 python 的`os.walk`试试,那玩意不是一下子全部遍历的,是逐级返回的,应该不会爆内存

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/721629

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX