为什么“查找-mmin -1 -exec du -cb {} + | grep总数|头-1”和“查找-mmin -1 -exec du -ch {} + | grep总数|头-1”不同

时间:2018-10-29 17:29:18

标签: linux bash grep find exec

当我运行命令时:

find / 2>/dev/null -user root -type f -mmin -1 -exec du -cb {} + | grep total | head -1

我得到了相当大的字节数。

但是,当我运行相同的命令但具有可读性而不是字节时,如下所示:

find / 2>/dev/null -user root -type f -mmin -1 -exec du -ch {} + | grep total | head -1

我得到0。我还尝试去掉head -1,以为我抓取了错误的数据,但是每次打印的结果都是0。为什么是这样?是否有另一种方法可以使用find查找字节和人类可读的打印输出来获取找到的所有文件的总大小?

2 个答案:

答案 0 :(得分:0)

-xdev命令使用find选项以排除其他文件系统。

我还没有解释为什么的原因,但是我认为这与tmpfsdevtmpfs文件系统(例如/proc)有关。

答案 1 :(得分:0)

运行方案时,我得到了相同的结果,因为-b选项的大小为/proc/kcore

  

procfs有点黑魔法;其中没有文件是真实的。它看起来像文件系统,行为像文件系统,并且是文件系统。但是没有一个存储在磁盘(或其他位置)上。

     

/ proc / kcore专门是一个文件,直接映射到虚拟内存中的每个可用字节。 128TB来自Linux,它分配了64位中的47位用于虚拟内存。

当我对-ch参数使用du时,它显示/ proc / kcore为0:

  

0 / proc / kcore

但是当我使用-cb时,它会将我的/ proc / kcore显示为:

  

140737486266368 / proc / kcore

这是因为-b选项:

-b, --bytes
equivalent to '--apparent-size --block-size=1'

--apparent-size

--apparent-size
print apparent sizes, rather than disk usage; although the apparent size is 
usually smaller, it may be larger due to holes in ('sparse') files, internal 
fragmentation, indirect blocks, and the like

参考:

/proc kcore file is huge

https://linux.die.net/man/1/du