du コマンドをファイルタイプ別にのみ「フィルタリング」する代わりに

du コマンドをファイルタイプ別にのみ「フィルタリング」する代わりに

次のコマンドは、最大50のディレクトリをリストします(再帰的に動作します)。

du --separate-dirs -hc  . | sort -hr | head -50

パフォーマンスの観点から最善のアプローチは何ですか出力形式を同じに保つ関数に引数を入力として渡すこともできますmyfunc doc docx xls xlsx ppt。使用される新しい50のディレクトリは、次のmyfuncように上から下にリストする必要があります。最初のディレクトリは、最大のディレクトリを含むディレクトリでなければなりません。組み合わせサイズファイル数 - この目的では、残りのファイル形式を完全に無視する必要があります(コマンドに従って各ディレクトリの合計サイズを表示するdoc OR docx OR xls OR xlsx OR ppt代わりに)。du

私はここに(私には役に立たない)パラメータがあることを知りdu、存在しないパラメータを--exclude探しているようです。--filter

find . \( -type f -name "*.doc" \) -o \( -type f -name "*.docx" \) -o \( -type f -name "*.xls" \)  -o \( -type f -name "*.xlsx" \)  -o \( -type f -name "*.ppt" \) -printf '%s\n' | awk '{s+=$0} END{print s+0}' | numfmt --to=iec --suffix=B --padding=7

私が試した他の方法のいくつか(上記の方法のような)は、以下よりもうまくいくようですdu。どんなアイデアがありますか?

ベストアンサー1

私の考えには3つのオプションがあります。

  1. du をフィルタとして書き換えます。 PerlのFile::Findが起動するのに最適な場所かもしれません。

  2. 選択したファイルのみを表示するプロキシファイルシステムを作成します。サーキットブレーカを実装するのは良いスタートです。パフォーマンスが悪いと予想されます。

  3. 既存のdu実装を修正します。

おすすめ記事