Обнаружение, если папка существует и переименование по шаблону

Я снова с другим вопросом в командной строке 🙂

Я сделал вспомогательный скрипт, который выглядит так

echo 'target.bak -> target.old_bak' mv target.bak target.old_bak echo 'target -> target.bak' mv target target.bak echo 'git clone:target -> target' git clone ssh://Shark@mcs15:29418/our-trunk-target target cd target echo 'Managing hooks...' scp -p -P 29418 Shark@mcs15:/hooks/commit-msg .git/hooks/ echo '... done. Enjoy the new clone while it lasts...' 

Это довольно простой, но он имеет свою точку зрения – он удерживает последние два клона и создает новый, мне нужно сохранить мой последний клон в target папке, потому что я привязал свою исходную папку в моем проекте eclipse, чтобы указать туда: D

Я хотел бы сделать улучшение этого сценария – вместо переименования target.bak -> target.old_bak и target -> target.bak Хотелось бы следующее:

 if bakN exists then rename bakN -> bak(N+1) rename recursivelly bak(N-1) -> bakN rename target to target.bak clone new repo into target 

Так что, если бы я прошел через 6 клонов, и я клонирую в седьмой раз, я бы хотел, чтобы это произошло:

 target.bak4 -> target.bak5 target.bak3 -> target.bak4 target.bak2 -> target.bak3 target.bak1 -> target.bak2 target.bak0 -> target.bak1 target -> target.bak0 Cloning into 'target'... 

Это сообщество очень помогло мне с моим предыдущим массовым вопросом, поэтому я надеюсь, что вы будете достаточно полезны, чтобы предоставить мне достойный способ сделать это тоже 🙂

РЕДАКТИРОВАТЬ:

Окончательный сценарий выглядит так, спасибо Wolfie за ваши основные вклады.

 #!/bin/bash MYUSER="Shark" TRUNK_FOLDER="target-on-trunk" TARGET_FOLDER="target" if [ -n "`ls -1d -v ${TARGET_FOLDER}.bak?`" ]; then echo "Pushing back numbered backups..." MAXBCK=`ls -1d ${TARGET_FOLDER}.bak* 2>/dev/null | egrep -o "[0-9]+$" | sort -n | tail -n1` if [ "$MAXBCK" != "" ]; then for (( c=$MAXBCK; c>=0; c-- )) do mv -v ${TARGET_FOLDER}.bak$c ${TARGET_FOLDER}.bak$(($c+1)) done fi fi if [ -e "$TARGET_FOLDER.bak" ]; then mv -v ${TARGET_FOLDER}.bak ${TARGET_FOLDER}.bak0 fi if [ -e "$TARGET_FOLDER" ]; then mv -v ${TARGET_FOLDER} ${TARGET_FOLDER}.bak fi echo "git clone: ${TRUNK_FOLDER} -> ${TARGET_FOLDER}" git clone ssh://${MYUSER}@mcs15:29418/${TRUNK_FOLDER} ${TARGET_FOLDER} cd ${TARGET_FOLDER} echo 'Managing hooks...' scp -p -P 29418 ${MYUSER}@mcs15:/hooks/commit-msg .git/hooks/ echo '... done. Enjoy the new clone while it lasts...'