什么是最可靠的命令来查找文件的实际大小Linux [关闭]

xoshrz7s  于 2023-10-16  发布在  Linux
关注(0)|答案(3)|浏览(134)

已关闭此问题为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。任何想法,这是最可靠的命令,以找到文件的实际大小?
有一些对它进行复制操作,我们不确定这是否是适当的,因为在某个时间源文件从那里复制被删除后,我们的工作。

alen0pnh

alen0pnh1#

这里没有不准确或可靠性的问题,你只是在比较两个不同的数字:逻辑尺寸vs物理尺寸
下面是Wikipedia's illustration for sparse files

ls显示灰色+绿色区域,即文件的逻辑长度。du(不含--apparent-size)仅显示绿色区域,因为这些区域占用空间。
您可以使用dd count=0 bs=1M seek=100 of=myfile创建稀疏文件。
ls显示100MiB,因为这是文件的长度:

$ ls -lh myfile
-rw-r----- 1 me me 100M Jul 15 10:57 myfile

du显示0,因为这是它分配的数据量:

$ du myfile
0 myfile
xmd2e60i

xmd2e60i2#

ls -l --block-size=M

将给予你一个很长的格式列表(需要实际看到文件大小)和四舍五入文件大小最接近的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

yqyhoc1h

yqyhoc1h3#

文件大小有几个概念,如that other guy's answersparse files上的wikipage图所解释的。
但是,您可能希望同时使用ls(1)stat(1)命令。
如果使用C语言编码,请考虑使用stat(2)lseek(2)系统调用。
参见this answer中的参考。

相关问题