[Bash] Obtenir la taille d'un fichier

C’est facile me direz vous :

fsize=$(du -h "$fichier"|awk '{ print $1 }')

sauf que, j’aimerais bien me passer de awk, et avoir l’équivalent en Bash pur (pas d’appel de commande externe), si possible en une ligne (ce serait dommage que le code soit plus lent que awk)

et je n’y parviens pas :think:

Le truc bizarre c’est que comme le montre par exemple [mono]du -h /bin/ls |hexdump -C[/mono], le caractère de séparation entre les 2 chaines n’est pas un espace, mais le caractère 0x09 :017

En bash pur sans aucun appel de commande externe, aucune idée.

Le minimum que je connaisse c’est : [mono]stat -c%s FICHIER[/mono] (donne la taille en octets, voir [mono]man stat[/mono] pour les autres options)

Quant au caractère 0x09, c’est une tabulation. :wink:

C’est vrai j’avais bien pensé à [mono]stat -c%s[/mono] mais la chaîne retournée n’est pas très sexy, alors que [mono]du -h[/mono] c’est beau, sauf le nom de fichier dont je n’ai pas besoin :stuck_out_tongue:

bon si ça se trouve je cherche à gratter 0.02s de temps d’exécution :033

fsiz=$(du -h /bin/ls); echo "${fsiz%%/*}"

me conviendrait, mais il faut des “/” dans le nom de fichier.

Je n’arrive pas à délimiter avec le caractère tabulation (0x09) :017

FILESIZE="$(du -h /bin/ls)" echo "${FILESIZE%%[[:space:]]*}"

merci :023