名前でディレクトリを選択し、サイズでリストを並べ替えます。

名前でディレクトリを選択し、サイズでリストを並べ替えます。

.stversions特定の名前(たとえば)を持つすべてのディレクトリを見つけ、サイズ別にソートされたリストを取得したいと思います。find -name .stversionsディレクトリをインポートし、 du -hd1各ディレクトリのサイズを決定し、次のコマンドをsort -h使用して1行のコマンドに入れることはできません。

find -name .stversions | du -hd1 | sort -h

ディレクトリを選択しないようですが(コマンドは単独で実行されます)、権限の拒否に対する苦情が発生した後、現在のディレクトリのディレクトリサイズを決定し、ソートされた出力を生成します。出力findをからパイプに接続するにはdu

答え1

標準duコマンドには入力は必要ありません。標準入力したがって、パイプで接続しても効果はありません。 (また処理しません-h-d1)GNUバージョンはNULで区切られたファイルのリストを受け入れます(参考文献を参照man du)。

GNU を使用する場合は、duパイプ全体に NUL 終了レコードを使用することもできます。これにより、予期しない文字(スペースを含む)を含むファイル名(ディレクトリ名)を処理できます。

find -type d -name '.stversions' -print0 | du -h -d1 --files-from0 - -0 | sort -z -h | tr '\0' '\n'

答え2

duテキストストリームを処理せず、ファイル名のリストが必要です。つまり、そのストリームにファイル名が含まれていても読み取れないため、テキストストリームを単にパイプで接続することはできません。したがって、2つの主なオプションがあります。 i)xargsこの種のツールを使用するか、ii)ファイル名を繰り返し渡すのが最も簡単な方法ですduxargs

find -name '.stversions' | xargs du -hd1 | sort -h 

ただし、パスに空白文字がある場合、この方法は失敗します。より強力なソリューションエマ・ルーオの答え、またはGNUツールを使用してください。

find -type d -name '.stversions' -print0 | xargs -0 du -hd1 | sort -h 
            

関連情報