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: