web-dev-qa-db-fra.com

Comment obtenir la taille physique d'un fichier sous Linux?

Je peux utiliser ls -l pour obtenir la taille logique d'un fichier, mais existe-t-il un moyen d'obtenir la taille physique d'un fichier?

12
user285003

ls -l vous donnera la taille apparente du fichier, qui est le nombre d'octets qu'un programme lirait s'il lisait 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 de du sur votre système.

Notez qu'avec GNU coreutil du (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 souhaitez 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 également faire ls -s --block-size=1 sur le fichier. Cela donnera le même nombre 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 prend environ 24 Ko sur le disque. Il s'agit d'un fichier clairsemé (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. des images de disque pour des machines virtuelles ou des fichiers d'échange, etc. La création d'un fichier clairsemé est rapide, tout en le remplissant de zéros est lent (et inutile).

Voir aussi le manuel de fallocate sur votre système Linux.

28
Kusalananda

J'obtiens la taille du fichier en octets comme ceci:

actualsize=$(du -b "${file}" | cut -f 1)
3
woohoo