首页 > 解决方案 > Bash - 更改具有最高版本号的文件夹的路径

问题描述

我有以下文件夹结构

MyPackage
  └── versions
      └── MyPackage-1.0
          └── src
          MyPackage-1.0.1
          └── src
          MyPackage-2.0
          └── src

我正在编写一个 bash 脚本来构建最新版本的包并检索构建工件。该步骤的一部分是更改到最新包的目录:

cd MyPackage/versions/MyPackage-2.0/src

我如何编写我的 bash 脚本,使其始终选择最高版本的子文件夹(所以在这种情况下MyPackage-2.0,但在未来它可能变成MyPackage-2.0.1or MyPackage-2.1)?

标签: bashdirectorycd

解决方案


在 GNU sort 的帮助下,您可以执行以下操作:

cd "$(printf "%s"$'\n' MyPackage/versions/* | sort -Vr | head -n1)"

分解:

$ printf "%s"$'\n' MyPackage/versions/*
MyPackage/versions/MyPackage-1.0
MyPackage/versions/MyPackage-1.0.1
MyPackage/versions/MyPackage-2.0
$ printf "%s"$'\n' MyPackage/versions/* | sort -Vr
MyPackage/versions/MyPackage-2.0
MyPackage/versions/MyPackage-1.0.1
MyPackage/versions/MyPackage-1.0
$ printf "%s"$'\n' MyPackage/versions/* | sort -Vr | head -n1
MyPackage/versions/MyPackage-2.0

推荐阅读