.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)ファイル名を繰り返し渡すのが最も簡単な方法ですdu
。xargs
find -name '.stversions' | xargs du -hd1 | sort -h
ただし、パスに空白文字がある場合、この方法は失敗します。より強力なソリューションエマ・ルーオの答え、またはGNUツールを使用してください。
find -type d -name '.stversions' -print0 | xargs -0 du -hd1 | sort -h