Ok, você quer zipar dois iteráveis, ou em outras palavras, você quer um único loop, iterando sobre um monte de strings, com um contador adicional. É muito fácil implementar um contador.
n=0
for x in $commands; do
mv -- "$x" "$n.jpg"
n=$(($n+1))
done
Observe que isso só funciona se nenhum dos elementos sobre os quais você está interagindo contiver espaços em branco (nem caracteres globbing). Se você tiver itens separados por novas linhas, desative globbing e divida somente em novas linhas.
n=0
IFS='
'; set -f
for x in $commands; do
mv -- "$x" "$n.jpg"
n=$(($n+1))
done
set +f; unset IFS
Se você precisar apenas iterar os dados uma vez, faça um loop em torno de read
(consulte Por que while IFS= read
é usado com tanta frequência, em vez de IFS=; while read..
? para mais explicações).
n=0
while IFS= read -r x; do
mv -- "$x" "$n.jpg"
n=$(($n+1))
done <<EOF
…
EOF
Se você estiver usando um shell que tenha matrizes (bash, ksh ou zsh), armazene os elementos em uma matriz. Em zsh, execute setopt ksh_arrays
para numerar elementos de matriz de 0 ou adapte o código para a numeração de elemento de matriz a partir de 1.
commands=(
./01/IMG0000.jpg
…
)
n=0
while [[ $n -lt ${#commands} ]]; do
mv -- "${commands[$n]}" "$n.jpg"
done