查找某组文件的大小

查找某组文件的大小

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

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

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

$ 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 

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

在:

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

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

在:

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

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

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

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

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

获取文件明显的大小而不是磁盘使用情况,添加该--apparent-size选项du(同样,GNU 特定)。添加-l选项(也是 GNU 特定的)来对硬链接进行多次计数。

答案2

命令 #1 给出文件及其内容的“有用”字节的总大小。

命令 #3 提供已用磁盘空间来保存文件。磁盘被划分为多个块(通常为 4 kB 长),这些块不能由多个文件共享。因此,1 到 4096 B 之间的任何大小的文件都将使用 4 kB 的磁盘空间,例如 [这是简化的。在某些 FS 类型(例如 ext)上,非常小的文件可以存储到文件表本身中,根本不使用数据块。]

命令 #2 只是计算字符的数量文件名。 (命令输出的大小find。)

相关内容