web-dev-qa-db-ja.com

Macのディレクトリとそのサブディレクトリの特定のファイルタイプの数を数えます

私が使う ls -l *.filetype | wc -lですが、現在のディレクトリでのみファイルを検索できます。
サブディレクトリで特定の拡張子を持つすべてのファイルを数えるにはどうすればよいですか?
どうもありがとうございました。

29
Xitrum

findコマンドでそれを行うことができます:

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

次の複合コマンドは、多少冗長ではありますが、 改行を含むファイル名 を正しく処理するため、正確なカウントが保証されます。

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
    

    注:合計4つの.txtファイルが含まれています。その2つには複数行のファイル名があります。つまり、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

0
RobC