私は使用ls -l *.filetype | wc -l
していますが、現在のディレクトリ内のファイルしか見つけることができません。
サブディレクトリに特定の拡張子を持つすべてのファイルをカウントするにはどうすればよいですか?
どうもありがとうございます。
質問する
26661 次
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"
注:前述の複合コマンドを実行する前に:
- まず、
cd
特定の拡張子を持つすべてのファイルをカウントするディレクトリに移動します。 - 必要に応じてパーツを変更
filetype
します。例:txt
デモ:
の結果をパイプ処理すると誤った結果が生成find
される理由をさらに示すには、次のようにします。wc -l
次の複合コマンドを実行して、いくつかのテストファイルをすばやく作成します。
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
次に、結果をにパイプする次のコマンドを実行し
find
ますwc -l
。find ~/Desktop/test -name "*.txt" | wc -l
誤って報告/印刷します:
6
次に、次の推奨される複合コマンドを実行します。
total=0; while read -rd ''; do ((total++)); done < <(find ~/Desktop/test -name "*.txt" -print0) && echo "$total"
正しく報告/印刷します:
4
于 2019-12-11T12:55:11.903 に答える