我试图找出特定用户拥有的所有文件的总大小。
在尝试这样做时,我在执行不同的命令时得到不同的大小。
哪个命令可以正确地找出特定用户拥有的所有文件的总大小?
$ 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
与 一样ls
,du
将文件列表作为参数,而不是来自其输入。因此,在这里,您可以获取当前目录中所有文件和目录的磁盘使用情况(递归地)。
要使用 GNU 实用程序获取 所拥有的所有常规文件的磁盘使用情况agalya
,您可以执行以下操作:
find . -type f -user agalya -print0 | du -hc --files0-from=- | tail -n 1
--files0-from
告诉du
(du
仅限 GNU)从标准输入(由此处表示)获取文件列表-
。-c
给出累积大小(请注意,同一文件的硬链接仅计算一次)。
获取文件明显的大小而不是磁盘使用情况,添加该--apparent-size
选项du
(同样,GNU 特定)。添加-l
选项(也是 GNU 特定的)来对硬链接进行多次计数。
答案2
命令 #1 给出文件及其内容的“有用”字节的总大小。
命令 #3 提供已用磁盘空间来保存文件。磁盘被划分为多个块(通常为 4 kB 长),这些块不能由多个文件共享。因此,1 到 4096 B 之间的任何大小的文件都将使用 4 kB 的磁盘空间,例如 [这是简化的。在某些 FS 类型(例如 ext)上,非常小的文件可以存储到文件表本身中,根本不使用数据块。]
命令 #2 只是计算字符的数量文件名。 (命令输出的大小find
。)