ファイルセットのサイズを見つける

ファイルセットのサイズを見つける

特定のユーザーが所有するすべてのファイルの合計サイズを見つけようとします。

これを行うと、他のコマンドを実行するとサイズが異なります。

特定のユーザーが所有するすべてのファイルの合計サイズを正しく調べるコマンドは何ですか?

$ find . -type f -user silviya|ls -lh|head -1 
total 68K
$ find . -type f -user agalya|wc -c
284
$ find . -type f -user agalya|du -sk
120 .

このような変化の理由は何ですか?

答え1

存在する:

find . -type f -user silviya|ls -lh|head -1 

findtoの出力をパイピングしlsますが、ls入力を読みません。リストするファイルのリストを引数として使用します。ここに同じ引数がない場合、現在のディレクトリに隠されていないファイルが一覧表示されます。したがって、ここでは現在のディレクトリに隠されていないすべてのファイル(すべての種類)のディスク使用量を取得できます(与えられたファイルのサイズは各ハードリンクに対して計算されます)。

存在する:

find . -type f -user agalya|wc -c

出力からバイトを計算するため、findこれはディスク使用量やファイルサイズではなく、ファイルパス(および改行区切り文字)のサイズです。

存在する:

find . -type f -user agalya|du -sk

ls同様に、duファイルのリストを入力ではなく引数として使用します。したがって、ここでは、現在ディレクトリにあるすべてのファイルとディレクトリのディスク使用量を(再帰的に)取得できます。

GNUユーティリティを使用して、すべての一般ファイルのディスク使用量を確認するには、agalya次の手順を実行します。

find . -type f -user agalya -print0 | du -hc --files0-from=- | tail -n 1

--files0-from標準入力(ここに表示)からファイルのリストを取得するように指示しますdu(GNUのみ)。累積サイズを提供します(同じファイルへのハードリンクは一度だけカウントされます)。du--c

ファイルのインポート確かにディスク使用量の代わりにサイズにこの--apparent-sizeオプションを追加しますdu(やはりGNUによって異なります)。-lハードリンクを数回計算するオプション(GNUのみ)を追加します。

答え2

コマンド#1は、ファイルの合計サイズとその内容を「有用な」バイト単位で提供します。

コマンド#3は、ファイルを保存するために使用されるディスク容量を提供します。ディスクはブロック(通常4 kBの長さ)に分割されており、複数のファイルで共有することはできません。したがって、1から4096Bまでのすべてのサイズのファイルは4kBのディスク容量を使用します。例えば[これは単純化されました。一部のFSタイプ(extなど)では、データブロックをまったく使用しなくても、非常に小さなファイルをファイルテーブル自体に格納できます。 ]

コマンド#2は文字数のみを計算します。ファイル名。 (コマンド出力のサイズですfind。)

関連情報