Questions shell

Questions shell - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 28-03-2014 à 13:51:11    

Bonjour à tous,
 
Avec quel commande afficher les fichiers et répertoires du dossier passé en paramètre dans l'ordre décroissant en nombre de caractère ?
 
Exemple :
 
    $ ./script.sh /bin
    plymouth-upstart-bridge
    running-in-container
    dbus-cleanup-sockets
    ntfsdump_logfile
    ntfs-3g.secaudit
    ulockmgr_server
    ntfs-3g.usermap
    vmmouse_detect
 
Comment pourrais-je le faire ?
 
 
Merci d'avance pour vos réponses.

Reply

Marsh Posté le 28-03-2014 à 13:51:11   

Reply

Marsh Posté le 28-03-2014 à 14:29:57    

Bonjour,
C'est pour un exercice d'école ?


---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 28-03-2014 à 14:40:31    

Bonjour,
 
Non, même pas je m'exerce tout seul à la maison je débute.
 
J'ai fait des recherches sur google et je vois qu'on peut le faire avec la commande awk mais le problème c'est que c'est assez complexe je trouve ...

Reply

Marsh Posté le 31-03-2014 à 04:03:17    

salut,
 
avant de coder, il faut déterminer un algorithme.
 
c'est faisable en bash (pas sh) aussi car il dispose désormais de tableaux associatifs, comme ksh, et awk.

Reply

Marsh Posté le 15-05-2014 à 17:08:12    


#!/bin/bash
 
 >/tmp/lstemp
 
 find . -maxdepth 1 -print | while read f
    do
       len=${#f}
         if [ "$len" -lt 10 ]
           then
              len=0"$len"
         fi    
      ch=$(echo -n "$len"; echo -n " "; echo "$f" )
      echo "$ch" >> /tmp/lstemp
   done  
 
sort -rn /tmp/lstemp | cut -d " " -f2 | cut -d'/' -f2


 
C'est lourd comme méthode, mais ça marche :o

Reply

Marsh Posté le 16-05-2014 à 07:24:24    

Pour ajouter des zéros à gauche j'utiliserais plutôt printf:
printf "%03d" $len

Reply

Marsh Posté le 16-05-2014 à 10:26:00    

même pas besoin d'un tableau associatif :

Code :
  1. #!/bin/bash
  2. for i in ~/*
  3. do
  4.    l=${#i} f=${i##*/}
  5.    test -z "${ar[l]}" && ar[l]="$f" || ar[l]="${ar[l]}"$'\n'"$f"
  6. done
  7. printf '%s\n' "${ar[@]}"

c'est purement formel, cette liste ne devrait pas pouvoir être utilisée par d'autres commandes pour en parser les noms de fichiers, puisque certains éléments du tableau en contiennent plusieurs :(

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed