find:相等的文件大小限制但不同的单位返回不同的结果


1

我注意到列出5 GiB以下文件的这两个命令会产生不同的结果:

find . -type f -size -5368709120c
find . -type f -size -5G

特别是使用千字节单位的那个( 5368709120c )返回大于使用GiB单元的文件返回的最大文件大小的其他文件( 5G )。

来自 find 手册页我读了以下内容:

-size n[cwbkMG]
          File uses n units of space.  The following suffixes can be used:
          `b'    for 512-byte blocks (this is the default if no suffix is used)
          `c'    for bytes
          `w'    for two-byte words
          `k'    for Kilobytes (units of 1024 bytes)
          `M'    for Megabytes (units of 1048576 bytes)
          `G'    for Gigabytes (units of 1073741824 bytes)

The size does not count indirect blocks, but it does count blocks 
in sparse files that are not actually allocated.  Bear in mind that the `%k'
and `%b' format specifiers of -printf handle sparse files differently.   The 
`b'  suffix always denotes 512-byte blocks and never 1 Kilobyte blocks, 
which is different to the behaviour of -ls.

所以,鉴于该单位 G 是1073741824, 5G 应该 5368709120c。该问题是由于计算稀疏或间接块的原因吗?

在此先感谢您的帮助。

Answers:


1

在我的Kubuntu man find 国家[强调我的]:

-size n[cwbkMG]
[...]
+- 像往常一样,前缀表示大于和小于。请记住这一点 大小向上舍入到下一个单位 。因此 -size -1M 不等于 -size -1048576c。前者只匹配空文件,后者匹配0到1,048,575字节的文件。

因此,如果一个文件需要超过4GiB且小于(或完全)5GiB,它将符合条件 -size 5G。您的 -size -5G 不会匹配它。


谢谢。遗憾的是CentOS的手册页没有提到这一点。
Vince
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.