El comando oneline que yo uso es la siguiente:
ls * | cat -n | while read i f; do mv "$f" `printf "PATTERN" "$i"`; done
patrón puede ser por ejemplo:
- cambiar el nombre con incre contador ción:
%04d.${f#*.}
(mantener la extensión de archivo original)
- cambiar el nombre con el contador de la subasta con el prefijo:
photo_%04d.${f#*.}
(mantenga extensión original)
- cambiar el nombre con el contador de incremento y extensión cambio en jpg:
%04d.jpg
- cambiar el nombre con el contador de la subasta con el prefijo y archivo de nombre base:
photo_$(basename $f .${f#*.})_%04d.${f#*.}
- ...
puede filtrar el archivo para cambiar el nombre con, por ejemplo ls *.jpg | ...
Tiene disponible la variable f
que es el nombre del archivo y i
que es el contador.
Por su pregunta el comando correcto es:
ls * | cat -n | while read i f; do mv "$f" `printf "foo%d05" "$i"`; done
En lugar de utilizar la SEC Yo sugeriría a escribir para ((i = 1; i <= N; i ++)); haz etc.Además de ser parte de bash, esto también evita tener que generar primero todos los números y luego ejecutarlos. – mweerden