Bash 如何选择版本号最高的文件名?

Bash 如何选择版本号最高的文件名?,bash,Bash,我编写了一个构建脚本,希望能够在安装时选择脚本的最新版本,例如,包名为package_X.X.X.tar.gz,并且有多个副本 有没有办法将build命令指向package_Y.tar.gz?其中Y=max(X.X.X)?如果除了版本号之外,其他文件都是相同的,您可以使用 ls -v | tail -n 1 从ls的手册页: ... -v natural sort of (version) numbers within text ... 用法示例: $ ls package_1.5.

我编写了一个构建脚本,希望能够在安装时选择脚本的最新版本,例如,包名为package_X.X.X.tar.gz,并且有多个副本


有没有办法将build命令指向package_Y.tar.gz?其中Y=max(X.X.X)?

如果除了版本号之外,其他文件都是相同的,您可以使用

ls -v | tail -n 1
ls
的手册页:

...
-v     natural sort of (version) numbers within text
...
用法示例:

$ ls
package_1.5.7.9.tar.gz  package_2.5.3.9.tar.gz  package_4.6.1.0.tar.gz
$ ls -v | tail -n 1
package_4.6.1.0.tar.gz

您可以使用regexp来提取版本信息,但我认为您不能在这里仅使用regexp。请记住,只有在版本号之前的前缀相同的情况下,这才有效。谢谢,要删除无关文件,我将使用:ls-v package*tar.gz | tail-n 1我不确定此解决方案是否能完美工作?它如何区分1.9和1.10之间的差异,它会不会认为9高于10,因为它会将其视为一个逐字符的字符串?@WORMSS我创建了一个空目录,我已经填充了foo文件并尝试了它。它按预期工作:1.10是比1.9更高的版本号,并且相应地放置文件。它必须检查文件名中是否有类似于版本号的内容,然后将此位视为版本号而不是一般字符串。只是OSX下的“ls-v”起不同作用的提示:“-v强制未编辑打印非图形字符”