AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 521464
Accepted
Jellyse
Jellyse
Asked: 2019-05-29 00:47:39 +0800 CST2019-05-29 00:47:39 +0800 CST 2019-05-29 00:47:39 +0800 CST

计算具有特定名称的目录中的文件数

  • 772

我在这里找到了这段代码https://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x700.html这很好地给了我目录中的文件数量。

ls -1 | wc -l

但我只想知道这些文件中有多少以 2009 开头(例如20091210_005037.nc)。

我试过ls -1 | wc -l 2009*了,但这会慢慢列出所有文件,似乎没有给我一个数字。

ls wc
  • 4 4 个回答
  • 19637 Views

4 个回答

  • Voted
  1. Best Answer
    Kusalananda
    2019-05-29T01:04:59+08:002019-05-29T01:04:59+08:00
    set -- 2009*
    echo "$#"
    

    这会将位置参数列表($1、$2、 ... 等)设置为匹配的名称2009*。这个列表的长度是$#。


    问题ls -1 | wc -l 2009*是您wc -l直接在匹配的文件上执行2009*,计算每个文件中的行数。同时,ls -1正在尝试写入 的标准输入wc,wc因为它被给出了一个明确的文件列表来处理,所以它没有读取。

    您可能想使用ls -d 2009* | wc -l. 这将列出所有匹配的名称2009*(使用lswith-d不列出目录的内容),并计算输出中的行数。请注意,-1如果您通过管道传输某处的结果,则不需ls要这样做(除非ls是强制列输出的别名或 shell 函数)。

    另请注意,如果任何文件名包含换行符,这会给您错误的计数:

    $ touch '2009
    > was
    > a
    > good
    > year'
    $ ls
    2009?was?a?good?year
    $ ls -l
    total 0
    -rw-r--r--  1 kk  wheel  0 May 28 11:09 2009?was?a?good?year
    $ ls -1
    2009?was?a?good?year
    $ ls | wc -l
           5
    $ ls -1 | wc -l
           5
    

    然而:

    $ set -- 2009*
    $ echo "$#"
    1
    

    (在大多数 shell 中使用set和输出$#另外不使用任何外部命令)


    用于递归find计数:

    find . -type f -name '2009*' -exec echo . \; | wc -l
    

    在这里,我们为当前目录中或当前目录下的每个找到的路径名输出一个点,然后我们计算它产生的行数。我们不计算文件名字符串本身,而是这样做以避免在文件名包含换行符时计算太多行。

    find我们能够更密切地控制我们计算的文件类型。上面,我们明确地测试了常规文件(-type f即不是目录和其他类型的文件)。shell 中的*模式不区分目录和文件,但是zshshell 可以*(.)用来修改模式的行为以仅匹配常规文件(zsh用户可能会使用2009*(.)而不是在上面和下面2009*的非变体中)。find

    使用**in (with shopt -s globstarin bash, or set -o extended-globin yash, or in any other shell that may support it), 递归计数:

    set -- **/2009*
    echo "$#"
    

    该模式**几乎匹配*,但也匹配/路径名。

    • 10
  2. Praveen Kumar BS
    2019-05-29T00:59:02+08:002019-05-29T00:59:02+08:00

    尝试使用以下命令,它工作正常并得到了结果

       find . -maxdepth 1 -type f -iname "2009*" | awk '{print NR}'| sed -n '$p'
    

    注意:如果你想在子目录下也请删除 maxdepth 选项

    • 3
  3. Jellyse
    2019-05-29T00:55:38+08:002019-05-29T00:55:38+08:00

    感谢评论中的人,这是我问题的答案:

    ls 2009* | wc -l
    

    或使用查找

    find 2009* | wc -l
    
    • 1
  4. Gowtham
    2019-05-29T01:03:53+08:002019-05-29T01:03:53+08:00

    使用 awk 计算以特定文件名开头的文件数。

    root@ubuntu$ find . -name "2009*" | awk 'BEGIN{total=0}; {total=total+1} END {print "total files starting with 2009 is " ,total}'
    total files starting with 2009 is  4
    
    • 0

相关问题

  • 检查 Ubuntu 中的磁盘空间(使用 ls)

  • zsh:“ls -S”在实用程序文件夹中不起作用

  • 使用“ls”时如何将文件日期转换为特定格式

  • 管道 ls 是否与 ls -1 相同?

  • 如何使用 ls 的输出打开最后修改的文件?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve