Bash 查找除两个主版本不同的最新版本之外的所有版本

Bash 查找除两个主版本不同的最新版本之外的所有版本,bash,shell,awk,sed,zsh,Bash,Shell,Awk,Sed,Zsh,背景: 11.2.1 11.2.1 arm64 12.0.1 12.0.1 arm64 12.0.2 12.0.2 arm64 12.1.1 12.1.1 arm64 12.1.2 12.1.2 arm64 12.2.1 12.2.1 arm64 13.0.0 13.0.0 arm64 13.0.1 13.0.1 arm64 11.2.1 11.2.1 arm64 12.0.1 12.0.1 arm64 12.0.2 12.0.2 arm64 12.1.1 12.1.1 arm64 12.1.

背景:

11.2.1
11.2.1 arm64
12.0.1
12.0.1 arm64
12.0.2
12.0.2 arm64
12.1.1
12.1.1 arm64
12.1.2
12.1.2 arm64
12.2.1
12.2.1 arm64
13.0.0
13.0.0 arm64
13.0.1
13.0.1 arm64
11.2.1
11.2.1 arm64
12.0.1
12.0.1 arm64
12.0.2
12.0.2 arm64
12.1.1
12.1.1 arm64
12.1.2
12.1.2 arm64
13.0.0
13.0.0 arm64
12.2.1
12.2.1 arm64
13.0.1
13.0.1 arm64
我想删除不需要但占用大量磁盘空间的iOS设备支持文件文件夹。我只想保留两个主要版本不同的最新版本(12.2.1和13.0.1,包括它们的arm64版本)

这是否可能使用壳牌一号衬里

给定使用语义版本控制命名的文件夹列表,如下所示:

11.2.1
11.2.1 arm64
12.0.1
12.0.1 arm64
12.0.2
12.0.2 arm64
12.1.1
12.1.1 arm64
12.1.2
12.1.2 arm64
12.2.1
12.2.1 arm64
13.0.0
13.0.0 arm64
13.0.1
13.0.1 arm64
11.2.1
11.2.1 arm64
12.0.1
12.0.1 arm64
12.0.2
12.0.2 arm64
12.1.1
12.1.1 arm64
12.1.2
12.1.2 arm64
13.0.0
13.0.0 arm64
12.2.1
12.2.1 arm64
13.0.1
13.0.1 arm64
预期输出:

11.2.1
11.2.1 arm64
12.0.1
12.0.1 arm64
12.0.2
12.0.2 arm64
12.1.1
12.1.1 arm64
12.1.2
12.1.2 arm64
12.2.1
12.2.1 arm64
13.0.0
13.0.0 arm64
13.0.1
13.0.1 arm64
11.2.1
11.2.1 arm64
12.0.1
12.0.1 arm64
12.0.2
12.0.2 arm64
12.1.1
12.1.1 arm64
12.1.2
12.1.2 arm64
13.0.0
13.0.0 arm64
12.2.1
12.2.1 arm64
13.0.1
13.0.1 arm64
表示应将其从原始列表中删除:

11.2.1
11.2.1 arm64
12.0.1
12.0.1 arm64
12.0.2
12.0.2 arm64
12.1.1
12.1.1 arm64
12.1.2
12.1.2 arm64
12.2.1
12.2.1 arm64
13.0.0
13.0.0 arm64
13.0.1
13.0.1 arm64
11.2.1
11.2.1 arm64
12.0.1
12.0.1 arm64
12.0.2
12.0.2 arm64
12.1.1
12.1.1 arm64
12.1.2
12.1.2 arm64
13.0.0
13.0.0 arm64
12.2.1
12.2.1 arm64
13.0.1
13.0.1 arm64

假设每个版本都有香草版和arm64版,那么:

comm -2 -3 list.txt <(sort -t. -n -r list.txt | awk -F. 'a[$1]++<2' | head -4 | sort)
以及输出:

11.2.1
11.2.1 arm64
12.0.1
12.0.1 arm64
12.0.2
12.0.2 arm64
12.1.1
12.1.1 arm64
12.1.2
12.1.2 arm64
13.0.0
13.0.0 arm64

哇!这已经非常接近我想要的了。。。谢谢你!有没有一种方法可以让脚本只基于版本号,而忽略文件夹名的arm64(或其他)后缀?你能在回答中稍微解释一下发生了什么吗?所以我可以对我的脚本做一些评论!您对此有何看法:
FOLDERS=$(ls-vd${HOME}/Desktop/Versions/*/| sed's/$/')KEEP=$(printf“%s\n”“$(IFS=\n;echo“${FOLDERS[*]}”)“| sort-t.-nr | awk-F.”a[$1]++我想你的脚本到目前为止还可以。你的和我的脚本都基于相同的逻辑和算法。在细节上,一些老生常谈的达迪可能会评论说,你不应该使用大写作为变量名,或者你不应该解析
ls
的输出。你会学到“bash陷阱”。BR。