对文件名排序,不带前导零

时间:2013-09-11 14:44:40

标签: bash sorting

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

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  
...    

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

2 个答案:

答案 0 :(得分:24)

如评论所示,请使用

sort -V

我最初将其发布为评论,因为此参数并非始终位于sort二进制文件中,因此您必须使用sort -k -n ...(例如here)。

答案 1 :(得分:0)

ls(现在?)有-v选项,可以执行您想要的操作。来自man ls

-v     natural sort of (version) numbers within text

这比管道sort简单,并遵循建议not to parse ls

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