我可以用来ls -l
获取文件的逻辑大小,但是有没有办法获取文件的物理大小?
答案1
ls -l
将为您提供文件的表观大小,这是程序从头到尾读取文件时将读取的字节数。 du
会给你“磁盘上”文件的大小。
默认情况下,du
为您提供文件的大小(以磁盘块数为单位),但您可以使用它-h
来获取人类可读的单位。另请参阅du
您系统上的手册。
请注意,对于 GNU coreutil du
(可能是 Linux 上的),使用-b
获取字节意味着该--apparent-size
选项。这不是您想要用来获取磁盘上实际使用的字节数的方法。相反,请使用--block-size=1
或-B 1
。
使用 GNU ls
,您还可以ls -s --block-size=1
对文件执行此操作。这将给出du -B 1
与文件相同的编号。
例子:
$ ls -l file
-rw-r--r-- 1 myself wheel 536870912 Apr 8 11:44 file
$ ls -lh file
-rw-r--r-- 1 myself wheel 512M Apr 8 11:44 file
$ du -h file
24K file
$ du -B 1 file
24576 file
$ ls -s --block-size=1 file
24576 file
这意味着这是一个 512 MB 的文件,大约占用磁盘上 24 KB 的空间。它是一个疏文件(大多数零实际上并未写入磁盘,而是表示为文件中的逻辑“孔”)。稀疏文件在处理预分配的大文件(例如虚拟机的磁盘映像或交换文件等)时很常见。创建稀疏文件很快,而用零填充它很慢(而且不必要)。
fallocate
另请参阅Linux 系统上的手册。
答案2
我得到的文件大小以字节为单位,如下所示:
actualsize=$(du -b "${file}" | cut -f 1)