【问题标题】:Unix - Count Number of file types recursivelyUnix - 递归计算文件类型的数量
【发布时间】:2015-05-26 10:44:13
【问题描述】:

我是 Stack Overflow 的新手,并且在某种程度上是 Linux 的新手。我一直在尝试使用以下命令作为示例过滤父目录中的特定文件及其子目录:

ls -R | grep '*.jpg' | wc -l

在查找单个文件时我发现这很好,但我需要每月执行一次,并寻找更快的方法在一个命令中列出多种类型。我故意要排除隐藏文件。

我试过了,但无济于事—— Count number of specific file type of a directory and its sub dir in mac

我在网上看到了来自list, find, tree, echo 等的不同方法,因此非常感谢您提供任何帮助,如果有比我目前正在做的更好的方法,那么这不是问题,因为我我愿意接受建议。我只是不确定目前剥这只猫的最佳方法是什么!

非常感谢

【问题讨论】:

    标签: linux unix count file-type


    【解决方案1】:

    您可以在 find 的帮助下完成此操作,正如您在最初帖子的链接中提到的那样。 就像这样:

    find . -name \*.jpg -or -name \*.png -not -path \*/\.\* | wc -l
    

    【讨论】:

    • 这很好用,但它也包括目录中的隐藏文件,这是我不想要的。
    • 如果您希望大小写文件扩展名匹配,您也可以使用-iname 而不是-name 来忽略大小写。
    【解决方案2】:

    您可以使用grep 过滤多个模式。您应该了解 linux 中的手册页,只需在终端中输入 man grep,您就会看到该程序的功能和方法。

    对于您的问题,您可以例如使用它来过滤 png 和 jpeg 文件(不区分大小写,从而得到 PNG 和 png 文件):

    ls -R | grep -i '*.jpg\|*.png' | wc -l
    

    -i 将忽略名称的大小写,\| 是一个或连接。

    【讨论】:

    • -i 标志在我的原始命令上运行良好,但运行 ls -R | grep -i '.rtf\|.txt' | wc -l 返回 0 个结果。看起来 or 是原因,我已经使用我知道包含结果的不同文件类型进行了测试。
    【解决方案3】:

    感谢大家的贡献,如果这被证明对那里的人有用,我已经从一位开发者朋友那里得到了一些帮助,他很友好地为我研究了它,并且我发现什么最适合我的特定情况如下:

    find . -type f \( -iname "*.jpg" ! -iname ".*.png" ! -path "*/.HSResource/*" \) |wc -l
    

    这会跳过资源文件夹和隐藏文件,似乎会返回正确的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多