find . -size 1000 # files whose size, in number of 512-byte units (rounded *up*)
# is 1000. So, that's file whose size in bytes ranges from
# 1000*512-511 (999*512+1) to 512*1000
find . -size -1000 # files whose size is 999*512 bytes or less
find . -size +1000 # files whose size is 1000*512+1 bytes or more
POSIX只指定无后缀或指定
c
后缀。如果没有后缀,值将被解释为 512 字节块;带有c
后缀的值将被解释为字节计数,正如您所确定的那样。一些实现支持更多后缀;例如GNU
find
支持b
对于 512 字节块c
对于字节w
对于 2 字节字k
千字节M
兆字节G
吉字节要补充 Stephen Kitt 提到的内容,请注意 gnu find在比较之前将大小四舍五入到指定的粒度!
如果你这样做
然后
不会给出相同的结果!
请参阅find 命令:-size 行为
简而言之 -
find . -size 1k
将列出每个大小为 [1,1024] 的文件,而find . -size 1024c
只会列出实际大小恰好为 1024 字节的文件。POSIXly:
然后,使用 POSIX
sh
语法,您可以执行以下操作:如果没有
c
后缀,请注意该行为可能会令人惊讶:这就是该
find
实用程序的 POSIX 规范。现在,各种
find
实现支持额外的后缀,但要注意相同的后缀可能会被不同的实现以不同的方式解释。正如@StephenKitt 所指出的,GNU
find
支持cwbkMG
字节、字、512 字节单位、kibibyte、mebibyte、gibibyte,但它的行为类似于 POSIX 所find
要求的,例如与上面find . -size -12G
我们的不同,因为文件的大小为find . -size "-$((12 * GiB))c"
gibibyte(向上舍入)严格小于 12,因此文件大小为 11GiB 或更小。例如,
find . -size -1G
仅查找空文件(大小为 0 的文件)。单字节文件被视为 1GiB,因为大小会向上舍入到下一个 GiB。busybox
find
支持cwbk
后缀,但对它们的解释与 GNU 不同find
。它对没有后缀的大小的处理也不符合 POSIX 标准。对于 busybox
find
,find . -size -12G
类似于find . -size "-$(( 12 * GiB ))c"
, 和 ,其find . -size -1
大小范围为 0 到 511 而不仅仅是 0。toybox
find
(例如在 Android 上)find
在这方面的行为类似于 busybox(并且也不兼容 POSIX)。另一个区别是后缀不区分大小写,TPE
对于 tebibyte、pebibyte 和 exbibyte 也支持,并且d
可以使用(十进制)附加后缀来指定单位是 1000 的幂而不是 1024。例如,-size 1kd
查找正好是 1000 的文件字节(1 KB)而不是 1024 字节(1 KB)-size 1k
。在 toybox 中
find
,后缀处理是作为其atolx()
功能的一部分完成的,该功能不仅仅用于find
. 但请注意,由于它支持0xffff
十六进制数字,因此也存在十六进制数字的冲突cbeCBE
。-size -0x2c
不是小于 0x2 字节,而是小于 0x2c (44) 512 字节单元。FreeBSD/DragonFlyBSD
find
支持ckMGTP
(不是),但虽然它的行为符合 POSIX 的要求,没有后缀,但当有后缀时,bwE
它的行为就像 busybox/toybox 而不是 GNU 。find
sfind
或者find
bosh shell 的内置行为类似于 FreeBSD,但后缀不区分大小写并且bwE
受支持。据我所知,所有OpenBSD、 NetBSD ( https://man.freebsd.org/cgi/man.cgi?query=find&apropos=0&sektion=1&manpath=NetBSD+10.0&arch=default&format=html#PRIMARIES )、Illumos、Solaris、AIX、HP/UX
c
仅支持 512 字节单位或POSIX 要求的字节的无后缀。因此,简而言之,为了可移植性,最好的选择是使用后缀
c
并手动计算单位。为了完整起见,
L
glob 限定符zsh
(kmgt
不区分大小写,但pP
适用于 512 字节单位,而不是 pebibyte)的行为类似于 POSIX/GNUfind
(*(LM-12)
例如,扩展到大小在 0 到 11 mebibytes 之间的文件)。st_size
1 这是返回结构的属性中报告的大小,lstat()
其对于非常规文件的含义可能因系统而异。