为什么“find -size -1G”找不到任何文件?

为什么“find -size -1G”找不到任何文件?

当我发出:

find / \( -type f -size +10M \) -and \( -type f -size -1G \)

我没有收到任何结果;但是,当我输入:

find / \( -type f -size +10M \) -and \( -type f -size -1000M \)

它返回一些文件。

怎么了?我不能在操作器的两侧使用不同的测量单位吗-and

答案1

问题与-and运算符无关,而是与 参数的不直观语法有关-size。参数不是给定单位的最大大小,而是执行计算的最大数字和单位。该测试-size -1k并不是指“小于 1kB”,而是“kB 数(向上取整)小于(且不等于)1”。因此,-size -1k仅匹配大小为 0 的文件,对于-size -1M-size -1G等也同样。

要匹配 2 30字节或更少的文件,请使用-size -2G、 或-size -1025M等(观察如何-2G不等于-2048M)。或者,使用! -size +1G- 带有修饰符的尺寸+意味着“严格大于这个尺寸”。要匹配 2 30 -1 字节或更少的文件,请使用-size -1073741824c.

我认为如此奇怪的原因是与 的历史兼容性,它计算了块;向上舍入是有意义的,因为占用例如 7.5 个块的文件实际上占用了 8 个块,而最后一个块未填满。因此意味着“占用 7 个街区或更少”。添加一个单元就像使该单元成为块大小一样,因此意味着“占用 7kB 或更少”。-size -NUMBERUNIT-size -NUMBER-size -8-size -8k

(这个答案是关于 GNU find 的——其他一些实现的行为不同,并且 POSIX 没有标准化块和字节以外的单位。)

相关内容