使用 bash 创建具有增量版本的新目录
create new directory with incremental version using bash
我需要以增量方式生成新目录。以下是文件夹结构:-
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 manifests/$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))
你可以用 awk
:
next=`echo "$last" | awk -F. '{print ".""."(+1)}'`
使用普通 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
.
的父目录 它通过对包含至少两个点且以 a 开头和结尾的目录进行版本排序来找到最新版本数字。然后它增加(一个)找到的最新版本的最后一个点之后的部分(它假设该部分是一个整数)。
每个增量都有一个函数:
#!/bin/bash
next() {
local l=""
local a=""
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. Dockerfile
2. Makefile
3. manifests
+ 1.0.0
+ 1.0.1
我想从变量中的现有目录中获取最新版本,即 last=1.0.1,添加值 0.0.1 到 last 以获得下一个版本,即 next=1.0.2。这样我就可以使用 mkdir manifests/$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))
你可以用 awk
:
next=`echo "$last" | awk -F. '{print ".""."(+1)}'`
使用普通 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
.
的父目录 它通过对包含至少两个点且以 a 开头和结尾的目录进行版本排序来找到最新版本数字。然后它增加(一个)找到的最新版本的最后一个点之后的部分(它假设该部分是一个整数)。
每个增量都有一个函数:
#!/bin/bash
next() {
local l=""
local a=""
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