已关闭此问题为not about programming or software development。它目前不接受回答。
这个问题似乎不是关于a specific programming problem, a software algorithm, or software tools primarily used by programmers的。如果你认为这个问题与another Stack Exchange site的主题有关,你可以留下评论,解释在哪里可以回答这个问题。
22天前关闭
社区在22天前审查了是否重新打开此问题,并将其关闭:
原始关闭原因未解决
Improve this question
最近,我试图找出一个文件的大小使用各种命令,它显示了巨大的差异。ls -ltr
显示其大小约为34 GB(字节由我四舍五入),而du -sh文件名显示其大小约为11 GB。而stat命令显示相同,大约为34 GB。任何想法,这是最可靠的命令,以找到文件的实际大小?
有一些对它进行复制操作,我们不确定这是否是适当的,因为在某个时间源文件从那里复制被删除后,我们的工作。
3条答案
按热度按时间alen0pnh1#
这里没有不准确或可靠性的问题,你只是在比较两个不同的数字:逻辑尺寸vs物理尺寸
下面是Wikipedia's illustration for sparse files:
ls
显示灰色+绿色区域,即文件的逻辑长度。du
(不含--apparent-size
)仅显示绿色区域,因为这些区域占用空间。您可以使用
dd count=0 bs=1M seek=100 of=myfile
创建稀疏文件。ls
显示100MiB,因为这是文件的长度:du
显示0,因为这是它分配的数据量:xmd2e60i2#
将给予你一个很长的格式列表(需要实际看到文件大小)和四舍五入文件大小最接近的
MiB
。如果您想要
MB
(10^6字节)而不是MiB
(2^20字节)单位,请使用--block-size=MB
。如果你不想在文件大小上附加
M
后缀,你可以使用类似--block-size=1M
的后缀。感谢Stéphane Chazelas的建议。这在
ls
的手册页中有描述;man ls
并搜索SIZE
。它还允许使用MB/MiB
以外的单元,从外观上看(我没有尝试),它还允许使用任意的块大小(因此,如果您愿意,可以将文件大小视为412字节块的数量)。请注意,
--block-size
参数是Open Group的ls
之上的GNU扩展,因此如果您没有GNU用户区(大多数Linux安装都有),这可能不起作用。来自GNU coreutils 8.5的ls确实支持如上所述的--block-size
。yqyhoc1h3#
文件大小有几个概念,如that other guy's answer和sparse files上的wikipage图所解释的。
但是,您可能希望同时使用ls(1)和stat(1)命令。
如果使用C语言编码,请考虑使用stat(2)和lseek(2)系统调用。
参见this answer中的参考。