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)
这种变化的原因是什么?
在:
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告诉du(du仅限GNU )从标准输入(由-此处表示)获取文件列表。-c给出累积大小(注意,同一个文件的硬链接只计算一次)。
要获得文件的表观大小而不是磁盘使用情况,请将--apparent-size选项添加到du(同样,GNU 特定的)。添加-l选项(也是 GNU 特定的)以多次计算硬链接。