tris d'une taille [shell] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 30-08-2007 à 08:36:48
| coolben a écrit : Une idèe ? | 
 
retirer le -h ... 
Marsh Posté le 31-08-2007 à 07:29:48
merci pour ta réponse mais ca ne fais que rajouter Ko a toutes les lignes. 
Ca reviens a faire un : du -s * | sort -n 
Pas d'autres idées ? 
Marsh Posté le 31-08-2007 à 07:57:33
Ben je vois pas trop comment la commande "sort" pourrait comprendre que tu veux trier d'abord les Ko, puis les Mo et enfin les Go ...  
 
 
Elle est bête la commande, elle voit par exemple: 
15Go 
950Mo 
300Ko 
Et tu lui dit de trier selon les chiffres ... forcément, elle va te donner ça: 
15Go 
300Ko 
950Mo 
  
 
 
Après, si tu veux qqch de vraiment aboutit, ben faut coder ça toi même 
Marsh Posté le 01-09-2007 à 23:33:41
Et ne serait il pas possible d'afficher une colonne supplémentaire a la sortie de du. 
Je m'explique, la première , la taille en byte (option -b) et la deuxième au format humain (option -h ) 
Marsh Posté le 02-09-2007 à 13:00:05
 
# 
### Affichage "du" en 3 colonnes : 
### octets - Ko|Mo - Repertoire 
# 
du -h > duh.tmp  
du -b > dub.tmp  
join -1 2 -2 2 -o 2.1,1.1,1.2 duh.tmp dub.tmp | \ 
sort -k1,1n | \ 
awk '{printf("%15s : %-8s%s\n",$1,$2,$3)}' 
rm duh.tmp dub.tmp 
Marsh Posté le 02-09-2007 à 13:10:33
Sinon tu peux te faire un petit script qui va reformater la sortie d'un "du -sb | sort -n" pour une lecture "Humaine". 
 
Exemple en Python : 
| Code : 
 | 
 
 
Puis :  
$ du -bs * | sort -n | /tmp/sort.py 
Marsh Posté le 02-09-2007 à 13:21:03
Bah pas besoin de sortir du python  
 
 
Le "du -s | sort -n" trie pour nous, on peut récupérer la liste triée avec cut, et on peut filer plusieurs arguments à "du -h"..... d'où : 
 
| du -sh $(du -s * | sort -n | cut -f 2) | 
 
 
Marsh Posté le 02-09-2007 à 13:31:28
Ca marche pas pour les noms de repertoires qui contiennent des espaces 
Marsh Posté le 02-09-2007 à 13:52:42
| e_esprit a écrit : Ca marche pas pour les noms de repertoires qui contiennent des espaces  | 
ok ok je rajoute un while :
| du -s * | sort -n | cut -f 2 | while read r; do du -sh "$r"; done | 
mais là tu vois, c'est moins beau... et c'est de ta faute  
 
Marsh Posté le 02-09-2007 à 14:00:42
Ok, je plaide coupable  
 
Mais au moins ca marche ![[:cosmoschtroumpf] [:cosmoschtroumpf]](https://forum-images.hardware.fr/images/perso/cosmoschtroumpf.gif) 
 
Marsh Posté le 02-09-2007 à 15:16:17
| Xavier_OM a écrit :   
   | 
Ouais, mais c'est un peu overkill de faire le 'du' en double... 
 
Je penche pour une solution scriptée comme e_esprit. (mais perso je l'aurais plutôt fait en perl...)
Marsh Posté le 04-09-2007 à 14:26:22
| franceso a écrit : Ouais, mais c'est un peu overkill de faire le 'du' en double...  | 
 
 
 
ou en sed 
| du -s * | sort -n | sed -e 's/^\([0-9]\+\)[0-9][0-9][0-9]\([ \t].*\)/\1M\2/g' | 
 
 
Du coup c'est plus overkill, un seul "du" et ni perl ni python 
Marsh Posté le 11-09-2007 à 08:30:32
ReplyMarsh Posté le 11-09-2007 à 10:00:02
| matafan a écrit : Mais ca suppose qu'un mega c'est 1000 kilo. | 
 
 
c'est sûr que niveau précision de calcul les regexp on a vu mieux   
 
 
un peu de awk ?  
| du -s * | sort -n | awk -F '\t' '{  | 
 
  
 
Marsh Posté le 30-08-2007 à 08:30:51
Bonjour
J'aimeria pourvoir trier la sortie de cette commande :
du -hs *
En utilisant sort -n comme ci dessous, la lettre réprésentant l'unité n'est pas prise en compte (k, M ,G ...)
du -hs * | sort -n
Une idèe ?