Em seu comando, os diretórios são renomeados primeiro para o valor de var j
, que é 2
, então você acaba com apenas uma cópia chamada 2
(conforme cada substitui a anterior). Depois que o processo for concluído, j
será reatribuído para j+1
( echo $j
retornos 3
) - ele não será incrementado.
Para fazer 59 cópias, você pode fazer isso:
for i in {2..60}; do cp -r -- P1 P"$i"; done
{2..60}
se expande para 2 3 4 5 6 7 até 60
Para números de largura fixa (então, 02 vem antes de 11 na classificação) use printf
:
for i in {2..60}; do cp -r -- P1 P$(printf %02d "$i"); done
Isso fornece P02
P03
P04
... P10
, P11
Para renomeação incremental você pode fazer algo assim, assumindo que as cópias não são numeradas ...
j=0; for dir in /path/to/stuff/*; do mv -v -- "$dir" "$dir""$((++j))"; done
Formato de largura fixa:
j=0; for dir in /path/to/stuff/*; do printf -v new "$dir%02d" "$((++j))"; mv -v -- "$dir" "$new"; done
Talvez valha a pena tornar esse último mais legível ...
j=0
for dir in /where/my/stuff/is/*
do printf -v new "$dir%02d" "$((++j))"
mv -v -- "$dir" "$new"
done