Linux中find命令特性/bug/问题

问题记录

测试环境:Ubuntu 16.04.4、 CentOS 7.4.1708、 Redhat 6.4、 OS X 10.11(后文分别简称U、C、R、O)

find ./ -size +5c -size -1024M                 系统U/C/R/O 均能够找到文件;

find ./ -size +5c -size -1G                        系统O找到文件;U/C/R找不到文件;

find ./ -size -1G                                        系统O找到文件;C/R找不到文件;U找到文件,但是结果错误;

find -size +1G                                          系统U/C/R/O 找到文件;


问题分析

怀疑和-1有关系,具体原因正在追踪ing。。。。


问题暂时解决

暂时解决方案为当需要find ${PATH} -size -1[k,M,G] 时,可以用1024M代替1G, 以此类推,把大的单位转换为1024小单位。


问题最终解决

其实,这一切都和find函数的特性有关,无关bug,也无关-1,嘿嘿嘿嘿嘿~

find函数的-size选项后边的参数只支持整数,这个有两层含义,举个栗子:

比如我们有一个8.4k的文件,

1)这时候find会认为它会占用9k空间(为啥不是8k?因为8k存储空间不够放下8.4k啊啊啊。。。),所以我们找大小等于9k的文件的时候,这个8.4k的文件会出现在结果集里边;

2)

同时如果我们查找小于9k的文件的时候,这时候find只会去找0k, 1k, 2k, 3k ...8k这9种“它自认为的大小"的文件(实际大小在[0,8k]中的文件),所以8.4k的文件不会出现在结果集里边儿。

3)总而言之,在find的世界里,只有整数。。。。。。

同理,比1G小的文件find会认为是0G,所以实际大小在0G-1G之间的文件find是找不到的,因为虽然不到1G,但是find认为文件会占用1G,话说find这孩纸还是很自我的嘛,活在自己的世界里,按照自己的世界观和人生观行事,完全无视世俗的眼光,哈哈哈~