环境:CentOS 7
bug 描述
有时候我们使用 -size
查找文件的时候发现有些文件始终查不到,但是 size
大小设置并没有问题,这到底是怎么回事呢?
bug 重现
我重现了出现这种 bug
的一些场景:
首先,准备了三个文件分别为 226、1281、489字节大小。
[root@test t1]# ll
-rw-r--r-- 1 root root 226 7月 29 18:57 error.log
-rw------- 1 root root 1281 7月 29 18:57 grubby
-rw-r--r-- 1 root root 489 7月 29 18:57 grubby_prune
然后,我们使用 find -size
来查找小于 1K
的文件,也就是 error.log
和 grubby_prune
[root@test t1]# find ./ -size -1k
[root@test t1]#
执行结果发现文件无法被查找出来。
那么小于 2k
呢,能被查找出来吗?
[root@test t1]# find ./ -size -2k
./
./grubby_prune
./error.log
我们发现文件找到了,但是同样的问题,1281
字节的文件没有被查找到。
这里我又试验了下 1M
和 1G
的 size
发现一样的问题,文件找不到,怎么回事?
[root@test t1]# find ./ -size -1M
[root@test t1]#
[root@test t1]# find ./ -size -1G
[root@test t1]#
我试了下把 size
大小改为 2M
和 2G
,发现文件又找到了。
[root@test t1]# find ./ -size -2M
./
./grubby
./grubby_prune_debug
./error.log
[root@test t1]# find ./ -size -2G
./
./grubby
./grubby_prune_debug
./error.log-20210108.gz
bug 产生原因
我们在查找小于某个单位大小的文件的时候,没有正确的设置 size
大小。
bug 解决办法
查找小于某个单位大小的文件的时候,一定要将 size
的值加一。例如小于 2M
的文件,那么我们使用 find 查找的话就要写 -size -3M
,这样的话就可以避免文件找不到的情况。
另外,我试了无符号的 size
,文件找出来了,但 1K
的 size
下少了一个 1281
字节文件。
[root@test t1]# find ./ -size 1k
./
./grubby_prune_debug
./error.log
[root@test t1]# find ./ -size 1M
./
./grubby
./grubby_prune_debug
./error.log
[root@test t1]# find ./ -size 1G
./
./grubby
./grubby_prune_debug
./error.log-20210108.gz
我又试了下 2K
的 size
。
[root@test t1]# find ./ -size 2k
./grubby
发现 2k
的 size
只找到了 大于1K 小于 2K 的文件,没有找到小于 1k
的文件。
于是这里也得出一个结论:
-size
选项无符号数值查找范围为 size-1
到 size
大小。
Tips
-size
常用例子:
# 查找小于 5k 大小文件
find ./ -size -6k
# 查找 4k - 5k 大小的文件
find ./ -size 5k
# 查找 1K - 4k 大小的文件
find ./ -size +1k -size -5k