次のコマンドは、最大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つのオプションがあります。
du をフィルタとして書き換えます。 PerlのFile::Findが起動するのに最適な場所かもしれません。
選択したファイルのみを表示するプロキシファイルシステムを作成します。サーキットブレーカを実装するのは良いスタートです。パフォーマンスが悪いと予想されます。
既存のdu実装を修正します。
答え2
ここで説明した内容を再現する小さなプロジェクトをGitHubに作成しました。単一の出力を使用しfind
、他のすべてを解析して完全に最適化されましたAWK
。貢献を歓迎します: