標準出力にはtree
ファイル階層に関する情報が含まれます。このツールにはこれを行うオプションが含まれています。ここで、サイズはすべてのファイルのサイズを追加し、tree --du -h
大きなディレクトリを検索できるフォルダ()のみを表示します。
私は同じものを探していますが、数十万のファイルを含む大きなツリーであまり大きくないディレクトリのホットスポットを見つけるためにファイルの数を探しています。
ベストアンサー1
不可能に見えますが、tree
次のようにできます。
遅いバージョン
find . -type d -exec bash -c 'printf "%7d " '\
'$(find "$1" -mindepth 1 -maxdepth 1 -type f -not -type l -printf . | wc -m); '\
'printf "%s\n" "$1"' find {} \; 2>/dev/null |
awk '$1>1000'
ファイル番号(この場合は1,000を超えるファイル番号のみ)とディレクトリパスを印刷します。
私の/ etc(ファイル数のしきい値は50)で実行すると、出力は次のようになります。
175 .
70 ./sysconfig
98 ./apparmor.d/abstractions
84 ./gconf/gconf.xml.schemas
122 ./brltty/Text
76 ./sane.d
エクスプレスバージョン
bu5hmanの答えは、これがどれほど遅いのかわからなかったことに気づきました。
以下は別のアプローチの最適化されたバージョンです。
find . -type f -not -type l -printf '%h\n' 2>/dev/null |
awk -v th=50 '{ a[$0]++; }; '\
'END { PROCINFO["sorted_in"]="@unsorted"; for (key in a) if (a[key]<th) delete a[key];'\
' PROCINFO["sorted_in"]="@val_num_desc";for (key in a) printf "%7d %s\n",a[key],key }'
175 .
122 ./brltty/Text
98 ./apparmor.d/abstractions
84 ./gconf/gconf.xml.schemas
76 ./sane.d
70 ./sysconfig
awk
フィルタリングできるだけでなく、計算して並べ替えることもできます。計算、フィルタリング、並べ替えなど、正しい順序でこれを行います。そして、ソート、カウント、ファイラーが最悪です。もちろん、これはディレクトリ番号が大きい場合にのみ重要です。
- 多数のプロセスが少量のデータを移動し、
- 少量またはプロセスでより多くのデータを移動
/ etcに400を超えるディレクトリがあり、サブプロセスのページキャッシュヒット率が(おそらく)100%の場合でも、これは非常に印象的です。