当我发出:
find / \( -type f -size +10M \) -and \( -type f -size -1G \)
Run Code Online (Sandbox Code Playgroud)
我没有收到任何结果;但是,当我输入:
find / \( -type f -size +10M \) -and \( -type f -size -1000M \)
Run Code Online (Sandbox Code Playgroud)
它返回几个文件。
怎么了?我不能在操作员的两侧使用不同的测量单位-and
吗?
Gil*_*il' 13
问题与-and
运算符无关,而与 的参数的不直观语法有关-size
。参数不是用单位给出的最大尺寸,而是最大数量和执行计算的单位。测试的-size -1k
意思不是“小于1kB”而是“kB的数量(向上取整)小于(且不等于)1”。因此,-size -1k
只匹配大小为0的文件,同样的-size -1M
,-size -1G
等等。
要匹配 2 30字节或更少的文件,请使用-size -2G
、 或-size -1025M
等(注意 how-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 不标准化块和字节以外的单位。)
归档时间: |
|
查看次数: |
1628 次 |
最近记录: |