Isso pode ajudar você:
Para estes arquivos:
target.bak4 -> target.bak5
target.bak3 -> target.bak4
target.bak2 -> target.bak3
target.bak1 -> target.bak2
target.bak0 -> target.bak1
Você pode fazer isso:
ls -1 target.bak* | awk '{print "mv "$0" "substr($0,0,length)substr($0,length,1)+1}' | sh
Para target -> target.bak0
, basta fazer cp target target.bak
Atualização:
Eu testei este comando e funciona apenas de 0 - > 19 backup, que a renomeação falhar ... mas para o que você precisa está OK:)
Atualização nº 2:
Versão do script:
if [ $# != 1 ]; then
echo 'Usage: $0 target'
exit
fi
if [ 'ls -1 $1* 2>/dev/null | grep -c $1' -lt 1 ]; then
echo "No file found"
exit
fi
MAXBCK='ls -1 $1.bak* 2>/dev/null | egrep -o "[0-9]+$" | sort -n | tail -n1'
if [ "$MAXBCK" != "" ]; then
for (( c=$MAXBCK; c>=0; c-- ))
do
# echo $c $(($c+1))
mv $1.bak$c $1.bak$(($c+1))
done
fi
cp $1 $1.bak0
Exemplo:
wolfy@wolfy-ubuntu:~/tmp$ ll
total 4
-rwxr-xr-x 1 wolfy wolfy 402 May 27 14:43 fresh_clone.sh*
-rw-r--r-- 1 wolfy wolfy 0 May 27 14:10 test
wolfy@wolfy-ubuntu:~/tmp$ ./fresh_clone.sh test
wolfy@wolfy-ubuntu:~/tmp$ ll
total 4
-rwxr-xr-x 1 wolfy wolfy 402 May 27 14:43 fresh_clone.sh*
-rw-r--r-- 1 wolfy wolfy 0 May 27 14:10 test
-rw-r--r-- 1 wolfy wolfy 0 May 27 14:44 test.bak0
wolfy@wolfy-ubuntu:~/tmp$ ./fresh_clone.sh test
wolfy@wolfy-ubuntu:~/tmp$ ll
total 4
-rwxr-xr-x 1 wolfy wolfy 402 May 27 14:43 fresh_clone.sh*
-rw-r--r-- 1 wolfy wolfy 0 May 27 14:10 test
-rw-r--r-- 1 wolfy wolfy 0 May 27 14:44 test.bak0
-rw-r--r-- 1 wolfy wolfy 0 May 27 14:44 test.bak1
wolfy@wolfy-ubuntu:~/tmp$ ./fresh_clone.sh test
wolfy@wolfy-ubuntu:~/tmp$ ll
total 4
-rwxr-xr-x 1 wolfy wolfy 402 May 27 14:43 fresh_clone.sh*
-rw-r--r-- 1 wolfy wolfy 0 May 27 14:10 test
-rw-r--r-- 1 wolfy wolfy 0 May 27 14:44 test.bak0
-rw-r--r-- 1 wolfy wolfy 0 May 27 14:44 test.bak1
-rw-r--r-- 1 wolfy wolfy 0 May 27 14:44 test.bak2
Tente com isso ... mas lembre-se de que este é apenas um código de exemplo, para "produção" você deve adicionar um cheque antes de executar isto:)
Esta versão funciona com arquivos N bak ... não apenas 19;)