使うことができます ls -l
ファイルの論理サイズを取得しますが、ファイルの物理サイズを取得する方法はありますか?
ls -l
は、ファイルの見かけのサイズを示します。これは、プログラムがファイルを最初から最後まで読み取った場合にプログラムが読み取るバイト数です。 du
は、「ディスク上の」ファイルのサイズを示します。
デフォルトでは、du
はファイルのサイズをディスクブロック数で示しますが、-h
を使用して人間が読める単位にすることもできます。システムのdu
のマニュアルも参照してください。
GNU coreutil's 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
これは、これがディスク上で約24 KBを必要とする512 MBファイルであることを意味します。これはsparseファイルです(実際にはディスクに書き込まれず、ファイル内の論理的な「ホール」として表されるほとんどのゼロ)。スパースファイルは、事前に割り当てられた大きなファイルを操作する場合に一般的です。仮想マシンまたはスワップファイルなどのディスクイメージ。スパースファイルの作成は高速ですが、ゼロで埋めるのは低速です(そして不要です)。
Linuxシステムのfallocate
のマニュアルも参照してください。
私はこのようにバイト単位でファイルサイズを取得します:
actualsize=$(du -b "${file}" | cut -f 1)