ls -l
ファイルの論理サイズを取得するために使用できますが、ファイルの物理サイズを取得する方法はありますか?
答え1
ls -l
プログラムがファイルを最初から最後まで読み取る場合、読み取るバイト数であるファイルの見かけのサイズを提供します。 du
ファイルの「ディスク上の」サイズを知らせます。
デフォルトでは、du
ファイルサイズはディスクブロック単位で提供されていますが、これを使用して-h
人間が読める単位を取得できます。また、du
システムのマニュアルを参照してください。
du
GNU coreutil(おそらくLinux)の場合、-b
getbytesを使用するとこの--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)