查找某组文件的大小

Sil*_*iya 1 shell size find files

我试图找出特定用户拥有的所有文件的总大小。

在尝试时,我在执行不同的命令时得到不同的大小。

哪个命令可以正确找出特定用户拥有的所有文件的总大小?

$ 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 .
Run Code Online (Sandbox Code Playgroud)

这种变化的原因是什么?

Sté*_*las 5

在:

find . -type f -user silviya|ls -lh|head -1 
Run Code Online (Sandbox Code Playgroud)

您正在通过管道find传输 to的输出ls,但ls不读取其输入。它将要列出的文件列表作为参数。如果没有像这里这样的参数,它会列出当前目录中的非隐藏文件。因此,在这里,您可以获得当前目录中所有非隐藏文件(任何类型)的磁盘使用情况(每个硬链接都计算给定文件的大小)。

在:

find . -type f -user agalya|wc -c
Run Code Online (Sandbox Code Playgroud)

您正在计算 的输出中的字节数find,因此这是文件路径(和换行符)的大小,而不是它们的磁盘使用情况或文件大小。

在:

find . -type f -user agalya|du -sk
Run Code Online (Sandbox Code Playgroud)

ls,du将文件列表作为参数,而不是来自其输入。所以在这里,您可以(递归地)获取当前目录中所有文件和目录的磁盘使用情况。

要使用agalyaGNU 实用程序获取 拥有的所有常规文件的磁盘使用情况,您可以执行以下操作:

find . -type f -user agalya -print0 | du -hc --files0-from=- | tail -n 1
Run Code Online (Sandbox Code Playgroud)

--files0-from告诉dudu仅限GNU )从标准输入(由-此处表示)获取文件列表。-c给出累积大小(注意,同一个文件的硬链接只计算一次)。

要获得文件的表观大小而不是磁盘使用情况,请将--apparent-size选项添加到du(同样,GNU 特定的)。添加-l选项(也是 GNU 特定的)以多次计算硬链接。