Bash 不带前导零的文件名排序
我想按以下模式对立体图像文件进行排序Bash 不带前导零的文件名排序,bash,sorting,Bash,Sorting,我想按以下模式对立体图像文件进行排序 img_i_j.ppm, 其中i是图像计数器,j是相机的id[0,1]。 目前,如果我使用 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
img_i_j.ppm,
其中i是图像计数器,j是相机的id[0,1]。
目前,如果我使用
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
...
无需修改文件名即可实现此目的吗?如注释所示,使用
sort -V
我最初将其作为注释发布,因为此参数并不总是在排序
二进制文件中,因此您必须使用排序-k-n…
(例如like)。ls
(现在?)具有-v
选项,这正是您想要的。从手册ls
:
-v natural sort of (version) numbers within text
这比管道输送到排序
更简单,并遵循建议ls
如果您确实想要解析输出,我想您可以在bash中处理
LC\u-COLLATE
。或者,在zsh中,您可以只使用glob*(n)
。在osx上不起作用:请参见@JeffCharter-yep,-V
仅用于确定的排序。这就是为什么我链接了一个sort-k-n…
方法。