• 请不要在回答技术问题时复制粘贴 AI 生成的内容
frmongo
V2EX  ›  程序员

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

  •  
  •   frmongo · Nov 4, 2020 · 4479 views
    This topic created in 2191 days ago, the information mentioned may be changed or developed.
    linux 一个文件夹里有大概接近 2000 万个文件(没有子文件夹)。
    使用 ls . | wc -l 这个命令执行查询数量会内存耗尽,有没有办法能精确查询文件数量呢?
    22 replies  •  2020-11-04 17:57:13 +08:00
    lxk11153
    lxk11153
    Nov 4, 2020
    1
    可以放这么多吗?[doge]
    yuanbo6
    yuanbo6
    Nov 4, 2020
    2
    惊了
    cydian
    cydian
    Nov 4, 2020 via Android
    3
    可以放这么多,inode 够用就行
    slimhigh
    slimhigh
    Nov 4, 2020
    4
    自己写个程序遍历文件夹。
    Osk
    Osk
    Nov 4, 2020
    5
    没有实战过, 不过可以考虑这些方法优化:

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

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

    ls -U dir_name >lst.txt
    frmongo
    frmongo
    OP
    Nov 4, 2020
    14
    或者用这个:
    ls -U dir_name >lst.txt
    wc -l lst.txt
    frmongo
    frmongo
    OP
    Nov 4, 2020❤️1
    15
    ls -U dir_name/ | wc -l 也可以
    mingl0280
    mingl0280
    Nov 4, 2020❤️1
    17
    ls -f | wc -l
    find . -name "*" | wc -l
    mingl0280
    mingl0280
    Nov 4, 2020
    18
    备注一下,可能有些系统有 locate,locate -c 就行
    dorothyREN
    dorothyREN
    Nov 4, 2020
    19
    ls -l > a && wc -l a
    ungrown
    ungrown
    Nov 4, 2020
    20
    用 python 的`os.walk`试试,那玩意不是一下子全部遍历的,是逐级返回的,应该不会爆内存
    openbsd
    openbsd
    Nov 4, 2020
    21
    tree ?
    secsilm
    secsilm
    Nov 4, 2020
    22
    python 的话,可以用 Path(dir).iterdir(),返回的是 generator,不耗内存。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3334 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 10:37 · PVG 18:37 · LAX 02:37 · JFK 05:37
    ♥ Do have faith in what you're doing.