便携式方式实现ls'-v标志(即按版本排序)?

时间:2009-09-26 18:22:31

标签: unix shell standards posix ls

我正在开发一些构建脚本,我只想依赖于标准化功能。 我需要按版本排序一些文件。假设文件是​​bar-1。{0,2,3} bar-11。{0,2,3}。

默认情况下,ls会给我:

bar-1_0
bar-11_0
bar-11_2
bar-11_3
bar-1_2
bar-1_3

使用'ls -v'轻松获得我想要的东西:

bar-1_0
bar-1_2
bar-1_3
bar-11_0
bar-11_2
bar-11_3

问题在于'ls -v' is not standard。标准sort似乎也缺少我想要的选项,不过我可以查看旧版本的规格。

任何人都可以建议一种可移植的方式来实现这种效果,而不是编写我自己的排序例程吗?

谢谢, 里斯

1 个答案:

答案 0 :(得分:5)

sort -n -t- -k2似乎做你想做的事。 -n为您提供数字(即非字母)排序; -t-将字段分隔符设置为--k2选择第二个字段,即版本号。

我的sort,在Ubuntu上,甚至可以正确地使用下划线,但我不确定这是否是标准的。可以肯定的是,您可以先按次要版本排序,然后按主要版本排序。