ls -l
vous donnera la taille apparente du fichier, qui est le nombre d'octets qu'un programme lira s'il lit le fichier du début à la fin. du
vous donnerait la taille du fichier "sur disque".
Par défaut, du
vous donne la taille du fichier en nombre de blocs de disque, mais vous pouvez utiliser -h
pour obtenir une unité lisible par l'homme à la place. Voir aussi le manuel pour du
sur votre système.
Notez qu'avec le du
de GNU coreutil (ce qui est probablement ce que vous avez sous Linux), -b
pour obtenir des octets implique le --apparent-size
option. Ce n'est pas ce que vous voulez utiliser pour obtenir le nombre d'octets réellement utilisés sur le disque. Utilisez plutôt --block-size=1
ou -B 1
.
Avec GNU ls
, vous pouvez aussi faire ls -s --block-size=1
sur le dossier. Cela donnera le même numéro que du -B 1
pour le fichier.
Exemple :
$ 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
Cela signifie qu'il s'agit d'un fichier de 512 Mo qui occupe environ 24 Ko sur le disque. C'est un épars fichier (principalement des zéros qui ne sont pas réellement écrits sur le disque mais représentés comme des "trous" logiques dans le fichier). Les fichiers épars sont courants lorsque vous travaillez avec des fichiers volumineux pré-alloués, par ex. images de disque pour les machines virtuelles ou les fichiers d'échange, etc. La création d'un fichier fragmenté est rapide, tandis que le remplir avec des zéros est lent (et inutile).
Voir aussi le manuel du fallocate
sur votre système Linux.
J'obtiens la taille du fichier en octets comme ceci :
actualsize=$(du -b "${file}" | cut -f 1)