[Linux-31] tri par nom

jpcas jpcas at free.fr
Mer 7 Jan 19:22:33 CET 2015


Le 07/01/2015 19:04, jdanield a écrit :
> Le 07/01/2015 18:16, jpcas a écrit :
> 
>> $ for i in *.*;do rep="${i::1}" && mkdir -vp "${rep^}" && mv -v "${i}"
>> "${rep^}"/"${i}";done
> 
> oui...
> 
> c'est passionnant, le bash, quand on a du temps à perdre :-)

Pas juste du temps à perdre, juste de la passion et de la pratique.

> 
> for i in *.*, je comprends, sauf que pourquoi *.* et pas * ?

Sinon, il prend tout ce qu'il trouve y compris d'éventuels répertoires
comme dans mon exemple, ce qui n'est pas le but…
> 
> d'ailleurs je crois que
> 
> for i ;
> 
> fait la même chose. il y a sûrement des finesses que je ne connais pas :-(

Oui, mais voir explication ci-dessus.

> 
> i::1
> 
> m'a donné du fil à retordre (pas facile à chercher sure le web)
> 
> http://wiki.bash-hackers.org/syntax/pe#substring_expansion
*
Suffit juste d'ouvrir le man bash, tout y est aussi expliqué
(http://man.cx/bash%281%29/fr#heading14) voir la partie Remplacement de
paramètres

> 
> en fait : (colon, en anglais), est un opérateur de sous-chaine
> 
> chaine:debut:nombre
> 
> là il faut lire: chaine-i:0:1 donc 1 caractère à partir du début de la
> chaine i. Ouf!
> 
> le ^ après rep, c'est pour tout mettre en majuscules, bonne idée.
> 
> et ca marche nickel,
> 
> merci!

De rien ;-))

> jdd




Plus d'informations sur la liste de diffusion Linux-31