当我发出
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的手册页中find
,size
谓词记录如下(重点是我的):
−大小 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