计算目录中特定文件类型的编号及其在mac中的子目录

时间:2012-09-29 20:55:18

标签: macos unix terminal

我使用ls -l *.filetype | wc -l但它只能在当前目录中找到文件 如何计算其子目录中具有特定扩展名的所有文件?
非常感谢你。

2 个答案:

答案 0 :(得分:54)

您可以使用find命令执行此操作:

find . -name "*.filetype" | wc -l

答案 1 :(得分:0)

以下复合命令(尽管有些冗长)可以保证计数准确,因为它正确handles filenames that contain newlines

total=0; while read -rd ''; do ((total++)); done < <(find . -name "*.filetype" -print0) && echo "$total"

注意:在运行上述复合命令之前:

  1. 首先,cd到要计算其特定扩展名的所有文件的目录。
  2. 根据需要更改filetype部分,例如txt

演示:

进一步说明为什么将find的结果传递到wc -l可能会产生错误的结果:

  1. 运行以下复合命令以快速创建一些测试文件:

    mkdir -p ~/Desktop/test/{1..2} && touch ~/Desktop/test/{1..2}/a-file.txt && touch ~/Desktop/test/{1..2}/$'b\n-file.txt'
    

    这将在您的“桌面” 上生成以下目录结构:

    test
    ├── 1
    │   ├── a-file.txt
    │   └── b\n-file.txt
    └── 2
        ├── a-file.txt
        └── b\n-file.txt
    

    注意:它总共包含四个.txt文件。其中两个具有多行文件名,即b\n-file.txt

    在较新版本的macOS上,名为b\n-file.txt的文件将在“ Finder” 中显示为b?-file.txt,即问号以多行形式表示换行行文件名

  2. 然后运行以下命令,将find的结果通过管道传输到wc -l

    find ~/Desktop/test -name "*.txt" | wc -l
    

    错误 报告/打印:

      

    6

  3. 然后运行以下建议的复合命令:

    total=0; while read -rd ''; do ((total++)); done < <(find ~/Desktop/test -name "*.txt" -print0) && echo "$total"
    

    正确 报告/打印:

      

    4