Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/12/2017, à 15:23

DonutMan75

[RESOLU] Bash : conversion de taille de fichier

Bonjour à tous,

je suis en train d'écrire un script pour afficher deux informations concernant un répertoire :
- sa taille, exprimée en unité facilement lisible pour un humain (ex: 124G)
- un pourcentage d'occupation par rapport à une constante précédemment définie dans le script (ex : 54%)

Comme le répertoire en question est assez gros, je souhaite ne lancer qu'une seule fois la commande du..

Voici ce que j'ai fait

S=$(du -h -s /chemin/de/mon/repertoire | awk '{print $1}')
X=$(echo $S | sed -re 's/G/*1024M/' | sed -re 's/M/*1024K/' | sed -re 's/K/*1/g')
Ratio=$((X*100/Xref))

L'option -h de du me donne ma première information.
Ensuite je travaille sur cette sortie pour convertir cela en kb et ensuite effectuer le ratio par rapport à Xref

Ce code vous paraît-t'il perfectible ? Auriez-vous fait de la même façon ?
J'ai imbriqué des sed pour tout convertir en kb, unité de ma variable Xref...
Je ne pense pas qu'il existe une commande linux permettant de convertir à la volée différents formats de taille (un peu comme date...)

SOLUTION : cette commande existe et s'appelle numfmt.

Merci d'avance pour vos retours smile

Donut

Dernière modification par DonutMan75 (Le 12/12/2017, à 18:39)

Hors ligne

#2 Le 12/12/2017, à 16:17

MicP

Re : [RESOLU] Bash : conversion de taille de fichier

Bonjour DonutMan75

Peut-être comme ça :

michel@debg53sw:~$ xRefBytes=171798691840               # Comme référence, j'ai pris 160GiB (en octets) 
michel@debg53sw:~$ repertoire="$HOME/Téléchargements/"
michel@debg53sw:~$ 
michel@debg53sw:~$ tailleBytes=$(du -sb "${repertoire}" 2>/dev/null | cut -f 1)
michel@debg53sw:~$ tailleHumRead=$(numfmt --to=iec-i --suffix=B ${tailleBytes})
michel@debg53sw:~$ taillePerCent=$(bc <<< "scale=2; ${xRefBytes} / ${tailleBytes}")
michel@debg53sw:~$ 
michel@debg53sw:~$ echo "${tailleHumRead}  ${taillePerCent}%"
32GiB  5.16%
michel@debg53sw:~$ 

Si tu préfère te passer des décimales,
tu peux remplacer :

taillePerCent=$(bc <<< "scale=2; ${xRefBytes} / ${tailleBytes}")

par :

taillePerCent=$(( ${xRefBytes} / ${tailleBytes} ))

Ce qui donnera :

michel@debg53sw:~$ echo "${tailleHumRead}  ${taillePerCent}%"
32GiB  5%
michel@debg53sw:~$ 

=======
EDIT : J'ai modifié mon message suite à la meilleure syntaxe proposée par moko138 dans son message qui suit ( Merci moko138 wink )
Je laisse ce message au cas où la sortie demandée était en Human Readable
Mais si il s'agissait d'obtenir une sortie en kilo octets la proposition de moko138 est bien plus simple.

Dernière modification par MicP (Le 12/12/2017, à 18:05)

Hors ligne

#3 Le 12/12/2017, à 17:10

moko138

Re : [RESOLU] Bash : conversion de taille de fichier

DonutMan75 a écrit :
S=$(du -h -s /chemin/de/mon/repertoire | awk '{print $1}')

(...) Ensuite je travaille sur cette sortie pour convertir cela en kb

Puisque tu veux des k(i)o, ne serait-ce pas plus simple de remplacer -h par -k, en partant de

du -sk /chemin/de/mon/repertoire 2>/dev/null | awk '{print $1}'

directement ?

Dernière modification par moko138 (Le 12/12/2017, à 17:12)


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#4 Le 12/12/2017, à 18:38

DonutMan75

Re : [RESOLU] Bash : conversion de taille de fichier

Bonjour à tous,
super MicP je ne connaissais pas du tout la commande numfmt !
Effectivement, utiliser bc permet d'avoir un réel en sortie.
Par ailleurs le calcul via $((...)) peut poser soucis si jamais j'ai une taille de 4.0K (par exemple : un répertoire vide).

moko138, en fait je veux également avoir une sortie facilement lisible par un humain. Du coup, si j'ai la sortie en ko ça peut poser problème sur des répertoires de plusieurs Go...

Merci à tous, et bonne soirée smile

Donut

Hors ligne

#5 Le 12/12/2017, à 21:08

moko138

Re : [RESOLU] Bash : conversion de taille de fichier

man du
       -B, --block-size=TAILLE
              utiliser cette TAILLE de bloc pour l'affichage.  Par  exemple  « -BM »
              affichera les volumes en unités de 1 048 576 octets. Voir le format de
              TAILLE ci-dessous
(...)
       Les  valeurs  affichées  sont exprimées dans la première unité fournie par la
       TAILLE  de   l'option   --block-size   ou   les   variables   d'environnement
       DU_BLOCK_SIZE, BLOCK_SIZE ou BLOCKSIZE. Sinon, l'unité par défaut est de 1024
       octets (ou 512 octets si POSIXLY_CORRECT est activé).

       TAILLE peut être une des unités suivantes : KB 1000, K 1024, MB 1000*1000,  M
       1024*1024 et ainsi de suite pour G, T, P, E, Z, Y. Taille peut également être
       un entier suivi optionnellement par l'un des suffixes ci-dessus.

Ex :

:~$ du -s -B1048576 2>/dev/null
76	.
du -s -BM 2>/dev/null
76M	.

et

:~$ du -s -B1024 2>/dev/null
77148	.
:~$ du -s -k 2>/dev/null
77148	.

Ou, plus exotique, pour mesurer en multiples de 5.123.456 octets
ou tout autre nombre entier, arbitraire, d'octets :

:~$ du -s -B5123456 2>/dev/null
16	.

smile
Ou pour mesurer en dixièmes de Gio :

du -s -B107374182 / 2>/dev/null -x media -x mnt -x D*
29	/

Par contre, chez moi :

numfmt
numfmt : commande introuvable
~$ apt-cache show numfmt*
N: Impossible de trouver le paquet numfmt*
N: Impossible de trouver de paquet correspondant à l'expression rationnelle « numfmt* »
E: Aucun paquet n'a été trouvé

sad
C'est dans quel paquet ?

Dernière modification par moko138 (Le 12/12/2017, à 21:09)


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne

#6 Le 12/12/2017, à 22:10

pingouinux

Re : [RESOLU] Bash : conversion de taille de fichier

Bonsoir,
numfmt se trouve apparemment dans le paquet coreutils.

Hors ligne

#7 Le 13/12/2017, à 13:12

MicP

Re : [RESOLU] Bash : conversion de taille de fichier

Bonjour

J'avais testé la présence de numfmt sur kubuntu 16.04.3 LTS
et je viens d'installer une machine virtuelle Ubuntu16.04.3 LTS
pour constater que numfmt y était aussi présent.

Dernière modification par MicP (Le 13/12/2017, à 13:13)

Hors ligne

#8 Le 13/12/2017, à 15:25

moko138

Re : [RESOLU] Bash : conversion de taille de fichier

Merci ! (En effet ces jours-ci je tourne avec une version qui n'est plus maintenue.)


%NOINDEX%
Un utilitaire précieux : ncdu
Photo, mini-tutoriel :  À la découverte de dcraw

Hors ligne