首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用ls命令递归显示目录文件计数?

如何使用ls命令递归显示目录文件计数?
EN

Unix & Linux用户
提问于 2021-10-20 16:18:08
回答 1查看 354关注 0票数 -1

在Ubuntu中的bash下,我希望ls -lah目录并让它递归显示目录的文件计数。也就是说,我希望它计数目录及其子目录中的所有文件。

这个是可能的吗?

EN

回答 1

Unix & Linux用户

发布于 2021-10-20 16:39:33

我在这里忽略了使用ls的请求,因为大多数Unixes上的实用程序的输出通常只适合于查看。

下面将使用findbash递归地计算当前目录的每个子目录中的名称数。

代码语言:javascript
运行
复制
find . -type d -exec bash -O nullglob -O dotglob -c '
    for dirpath do
        set -- "$dirpath"/*
        printf "%s:\t%d\n" "$dirpath" "$#"
    done' bash {} +

它使用一批目录路径名调用bash,内联脚本在给定的批处理上迭代,并在每个批处理中扩展*全局模式。通过设置nullglobdotglob shell选项,这将扩展为(可能隐藏的)名称列表,而$#是该列表的长度。

如果您只想要当前工作目录中最上层目录的计数:

代码语言:javascript
运行
复制
shopt -s globstar nullglob dotglob
for dirpath in */; do
    set -- "$dirpath"/**
    printf '%s:\t%d\n' "$dirpath" "$#"
done

这几乎是一样的,但我们不再需要使用find。我们使用**递归地覆盖每个目录下的所有名称,然后像以前一样显示结果。

事实上,我们可以轻微地修改它,以重新创建第一段代码,而根本不需要find。递归地获取每个目录中的名称计数:

代码语言:javascript
运行
复制
shopt -s globstar nullglob dotglob
for dirpath in **/; do
    set -- "$dirpath"/*
    printf '%s:\t%d\n' "$dirpath" "$#"
done

注意,我只将一个*从一个地方移到另一个地方。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/674058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档