17

我想用以下模式对立体图像文件进行排序

img_i_j.ppm,

其中 i 是图像计数器,j 是相机 [0,1] 的 id。目前,如果我使用

ls -1 *.ppm | sort -n

结果如下所示:

img_0_0.ppm
img_0_1.ppm
img_10_0.ppm
img_10_1.ppm
img_1_0.ppm  
img_11_0.ppm                        
img_11_1.ppm                        
img_1_1.ppm  
img_12_0.ppm

但我需要有这个输出:

img_0_0.ppm
img_0_1.ppm
img_1_0.ppm
img_1_1.ppm
img_2_0.ppm  
img_2_1.ppm
...                        
img_10_0.ppm                        
img_10_1.ppm  
...    

这是否可以在不调整文件名的情况下实现?

4

2 回答 2

31

如评论所示,使用

sort -V

我最初将它作为评论发布,因为这个参数并不总是在sort二进制文件中,所以你必须使用sort -k -n ...(例如像这里)。

于 2013-09-11T14:48:58.597 回答
1

ls(现在?)有-v选项,你想要什么。来自man ls

-v     natural sort of (version) numbers within text

这比管道更简单sort,并且遵循 解析 ls的建议。

如果您真的打算解析输出,我想您可以LC_COLLATE在 bash 中搞砸。或者,在 zsh 中,您可以只使用 glob *(n)

于 2018-05-29T00:24:13.230 回答