それぞれにいくつかのファイルを含む複数のサブディレクトリを持つディレクトリがあるとします。
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 {} \;