find 命令解释大小单位的方式之间的差异

find 命令解释大小单位的方式之间的差异

当我发出

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

我没有得到任何结果。但是,当我输入

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

该命令返回多个文件名。

怎么了?我不能在运算符的两边使用不同的测量单位吗-and

答案1

查找并确定大小

该命令的默认大小单位find是 512 字节的块。

令人困惑的是,当你以 kB、MB 或 GB 等单位指定文件大小时,find 四舍五入文件大小并在测试size谓词之前使用该数字。

例如,当大小谓词以 GB ( ) 表示时-size -1G,900MB 文件的大小将四舍五入为 1GB – 这并不小于 1GB,因此 不会返回这样的文件-size -1G。要查找小于 1GB 的文件,应以较小的单位指定大小:

find -size -1024M

看到这个Stéphane Chazelas 的回答关于Unix和Linux的相关问题。

find . -size -1M仅显示小于 1M 的文件,即 0M。是的,我知道,这很令人困惑。

官方文档

在里面POSIX的手册页中findsize谓词记录如下(重点是我的):

−大小 n[c]

如果文件大小(以字节为单位)除以 512,并且四舍五入到下一个整数,为n。如果n后面跟着字符“c”,则大小应以字节为单位。

手册页GNU find警告

+前缀-通常表示大于和小于,但请记住大小是四舍五入 到下一个单元(因此 1 字节文件不匹配-size -1M)。


-and谓词的使用

最后,谓词的使用-and与如何解释文件大小无关。在或find的两边使用不同的度量单位没有问题。-and-or

顺便说一句,-and是默认值,并隐式用于组合find表达式中多个谓词的求值方式;-and实际上是 GNU 的扩展,find因此省略它更有利于可移植性。此外,通过省略它,您可以大大简化您的find表达式(也不需要括号):

find / -type f -size +10M -size -1000M

相关内容