Comment préfixer l'ordre numérique sur les noms de files par Zsh / AWK / …?

Je voudrais faire précéder le formulaire d'ordonnance numérique 1-777 des ordres qui lui ont été donnés. Vous pouvez le boucler et incrémenter la variable dans Bash. Cependant, je voudrais le faire avec Zsh et / ou Awk. Un exemple suit. Noms de files

IMG_20161215_081850.jpg IMG_20161215_081851.jpg IMG_20161215_090559.jpg IMG_20161215_090601.jpg IMG_20161215_091308.jpg 

Voulait

 1.IMG_20161215_081850.jpg 2.IMG_20161215_081851.jpg 3.IMG_20161215_090559.jpg 4.IMG_20161215_090601.jpg 5.IMG_20161215_091308.jpg 

OS: Debian 8.5

 ls *.jpg | nl -s. 

nl va append des numéros de ligne; -s. spécifie a . comme séparateur entre le nombre et datatables (dans ce cas, les noms de file). Si vous voulez supprimer les espaces principaux de la sortie, vous pouvez append ceci:

 ls *.jpg | nl -s. | sed 's/^ *//' 

sed supprimera alors zéro ou plusieurs espaces du début de la ligne.

Si vous voulez vraiment faire ça avec awk :

 ls *.jpg | awk '{ print NR"."$0 }' 

NR est une variable interne indiquant le nombre d'loggings analysés jusqu'à présent.

Pour apporter des modifications permanentes aux noms de files, procédez comme suit (Michael Vehrs)

 ls *.jpg | nl -s. | sed 's/ *\([0-9]\+\)\.\(.*\)/\2 \1\.\2/' | xargs -n 2 mv 

Avec zsh, utilisez zmv pour effectuer un changement de nom en bloc. Exécutez d'abord autoload -U zmv (mettez ceci dans votre .zshrc ), puis

 i=1 zmv 'IMG_*.jpg' '$((i++)).$f'