我在 bash 脚本中运行这样的东西:
set -x
time convert 'cat.png' -quality 100 test.webp
time convert 'cat.png' -quality 100 test.jpeg
du -h test.webp test.jpeg
它通常会打印如下输出:
+ du -h test.webp test.jpeg
512 test.webp
387K test.jpeg
512
webp 文件的字节似乎小得不可思议,对吧?
当我du -h
在终端中运行之后,它显示不同的大小(这样比较合理)。
我知道du
没有--apparent-size
显示底层存储大小(例如块数乘以某个因子),但我仍然希望始终打印相同的确定性结果。
到底是怎么回事?
答案1
在某些文件系统上,像 ZFS 和 Btrfsdu
,没有--apparent-size
的结果随时间变化。
无法保证文件系统不会随着时间的推移而延迟、重新排列、压缩、重复数据删除或以其他方式修改物理存储。
因此,plaindu
可以随时给出不同的结果。
详细示例:在调用strace -v
上运行du
显示显示从 -type 系统调用返回的数据stat
;第一的:
newfstatat(AT_FDCWD, "test.webp", { ... st_blksize=131072, st_blocks=1, st_size=464124, ...
不久之后:
newfstatat(AT_FDCWD, "test.webp", { ... st_blksize=131072, st_blocks=1029, st_size=464124, ...