Значение, представленное в (stat _)[11]
, равно st_blksize
, что задокументировано как
Подсказка относительно «наилучшего» размера блока для операций ввода-вывода.Это поле не определено для блочных специальных или символьных специальных файлов.
Это необязательно размер блока конкретной файловой системы, в которой находится ваш файл, но эта же страница руководства содержит удобное определение:
blkcnt_t st_blocks; /* Number of 512 byte blocks allocated*/
Таким образом, вы можете использовать такой код, как
#! /usr/bin/perl
use warnings;
use strict;
sub usage { "Usage: $0 file ..\n" }
die usage unless @ARGV;
foreach my $file (@ARGV) {
my $dir = dirname $file;
my $blocks = (stat $file)[12];
unless (defined $blocks) {
warn "$0: stat $file: $!\n";
next;
}
print "$file - ", $blocks * 512, "\n";
}
Если вы обеспокоены тем, что размеры блоков ваших файловых систем не кратны 512, удвойте-проверьте с помощью
df -g <directory>
или если у вас есть root
fstyp -v /dev/dsk/...
Для обычного файла, размер самого файла, т.е. , (stat _)[7]
, обычно меньше, чем общий размер всех выделенных блоков, поскольку файловые системы выделяют целые блоки.