ファイルとディレクトリのリストをduにパイプしてディレクトリサイズのみを表示しますか?

ファイルとディレクトリのリストをduにパイプしてディレクトリサイズのみを表示しますか?

それぞれにいくつかのファイルを含む複数のサブディレクトリを持つディレクトリがあるとします。

1/a.txt
1/b.txt
2/c.txt
2/d.txt
3/e.txt
3/f.txt

各ファイルのサイズを見たいです。これを行うより簡単で直接的な方法があることに注意してくださいdu -a。たとえば。教育目的で以下がうまくいかない理由は疑問に思います。


私の無意味な運動

実行すると、find .すべてのファイルとディレクトリのリストが返されるので、次のようにパイプしてみました。

find . | xargs du

ただし、これはディレクトリ1、2、3のサイズのみを返します。xargs出力のfind各行がdu


私が使用している場合:

find . | xargs du -a

次に、期待どおりに動作し、すべてのファイルとディレクトリのサイズを一覧表示します。このオプションを使用してファイルのリストを渡す場合-type fにもうまく機能するため、これはファイルと混在するディレクトリのリストを受信することに関連しています。

ここで何が起こっているのでしょうか?

答え1

可能であれば、xargsすべての名前を1つのコマンドラインに入力して、に渡されたファイルのみを表示できますdu。その後、duファイル名は無視されます(予想されるように、ファイルはディレクトリの一部であるため渡されません)。 2回計算します)。

-n 1パラメーターを使用すると、xargsコマンドが切り離され、予想される内容がさらに表示されます。

find . | xargs -n 1 du -a

答え2

次のコマンドを使用できます

  find path -type f -printf "%s %p\n"

答え3

-execこの機能は以下で利用できますfind

find . -type f -exec du -h {} \;

関連情報