создать новый каталог с инкрементной версией, используя bash - PullRequest
1 голос
/ 02 августа 2020

Мне нужно создавать новые каталоги постепенно. Ниже представлена ​​структура папок: -

1. Dockerfile
2. Makefile
3. manifests
    + 1.0.0
    + 1.0.1   

Я хочу получить последнюю версию из существующих каталогов в переменной, например, last = 1.0.1 , добавить значение 0.0 .1 до last , чтобы получить следующую версию, т.е. next = 1.0.2 . Чтобы я мог создать новый каталог, используя mkdir manifestests / $ next , примерно так: -

1. Dockerfile
2. Makefile
3. manifests
    + 1.0.0
    + 1.0.1
    + 1.0.2   

Я могу получить имя каталога с последней версией, используя приведенную ниже команда: -

last=$(find manifests -type d -name '[0-9]*.[0-9]*.[0-9]*' -printf "%f\n" | sort -V | tail -n 1)

Как мне добавить 0.0.1 к переменной, чтобы next = 1.0.2 примерно так: -

next=$(($last + 0.0.1))

Ответы [ 3 ]

2 голосов
/ 02 августа 2020

С функцией для каждого приращения:

#!/bin/bash

next() {
  local l="$1"
  local a="$2"
  local l1 l2 l3 a1 a2 a3

  IFS="." read l1 l2 l3 <<< "$l"
  IFS="." read a1 a2 a3 <<< "$a"
  
  echo "$(($l1+a1)).$(($l2+a2)).$(($l3+a3))"
}

last="1.0.1"
add="0.0.1"

new=$(next "$last" "$add")
echo "$new"

Вывод:

1.0.2
1 голос
/ 02 августа 2020

С обычными bash и утилитами GNU:

#!/bin/bash

cd manifests || exit
last=$(printf "%s\n" [0-9]*.*.*[0-9]/ | sort -Vr | head -n 1)
last=${last%?} # Remove the last character, that is, the '/'
[[ -d $last ]] && mkdir "${last%.*}.$(( ${last##*.} + 1))"

Запускать его из родительского каталога manifests.
Он находит последнюю версию, выполняя сортировку версий в каталогах, содержащих не менее две точки и начало и конец ди git. Затем он увеличивает (на единицу) часть, идущую после последней точки последней найденной версии (предполагается, что эта часть является целым числом).

1 голос
/ 02 августа 2020

Вы можете сделать это с помощью awk:

next=`echo "$last" | awk -F. '{print $1"."$2"."($3+1)}'`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...