[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Script de sauvegarde incrémentée



Pascal BOYER a écrit, jeudi 23 décembre 2004, à 21:20 :
> Selon Jacques L'helgoualc'h <lhh+nospam@free.fr>:
[...]
> > Bash :
> >
> > precedent="$(ls -1tr /chemin/des/svgd/ | tail -1)"
> > n="${precedent//*[.0]}"
> > n_plus_un="$(printf '%04d' $[ n + 1 ])"
[...]
> Si t'as trois minutes, tu peux m'expliquer le principe de //*[.0] et de %04d

Au départ, j'essaie de récupérer l'extension du numéro avec ${precedent##*.}
qui supprime tout le début jusqu'au dernier point :

 $ precedent=test.txt.0042
 $ n=${precedent##*.}
 $ echo $n
0042
 $ echo $[ n + 1 ]
35

Pas  glop, 0042  est en  octal ;  donc je  passe à  //*[.0],  qui bouffe
avidement tout jusqu'au dernier point ou  zéro... ah, merde, s'il y a un
zéro à la fin ça ne va plus !

 $ precedent=test.txt.0040
 $ n="${precedent##*.}"
 $ echo $n
0040

Faire trois fois n=${n#0} est bourrin, mais on peut préciser la base :

 $ echo $[ 10#$n + 1 ]
41

Donc finalement (désolé pour le bug)

precedent="$(ls -1tr /chemin/des/svgd/ | tail -1)"
n="${precedent##*.}"
n_plus_un="$(printf '%04d' $[ 10#$n + 1 ])"

Le printf  '%04d' écrit le nombre  n + 1 sur  exactement quatre chiffres
décimaux, complétés à gauche par des zéros.


> Bonnes fêtes

Merci, et bonnes fêtes à tous
-- 
Jacques L'helgoualc'h



Reply to: