38

私は使用ls -l *.filetype | wc -lしていますが、現在のディレクトリ内のファイルしか見つけることができません。
サブディレクトリに特定の拡張子を持つすべてのファイルをカウントするにはどうすればよいですか?
どうもありがとうございます。

4

2 に答える 2

82

あなたはfindコマンドでそれをすることができます:

find . -name "*.filetype" | wc -l
于 2012-09-29T20:59:42.277 に答える
0

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

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では、名前が付けられたファイルは「Finder」b\n-file.txtのように表示されます。つまり、疑問符は複数行のファイル名の改行を示します。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

于 2019-12-11T12:55:11.903 に答える