我希望能够列出按多个排序键排序的目录中的所有文件。例如:
Level_5_10_1.jpg
Level_5_1_1.jpg
我要Level_5_1_1.jpg
首先出现。排序顺序应从最后一个数字开始,因此:
Level_4_2_1.jpg > Level_4_1_10.jpg
Level_3_2_1.jpg > Level_3_1_10.jpg
等等..
我尝试过:
ls | sort -h -k3,3n -k2,2n -k1,1n -t_
但没有得到我想要的结果。例如,它列出了 Level_5_1_2.jpg < Level_1_2_1.jpg
这是不正确的
有什么想法吗?
PS:这是一个pastebin文件列表。
最佳答案
我提取了一小部分文件名样本。当您使用 -t
选项按 _
分割文件名时,第一个字段为 1,即“级别”,字段 2 将是第一个数字,依此类推。我不完全确定您具体遵循的顺序,但我认为这个解决方案至少应该为您提供一些可以使用的东西。请注意,我截断了一些结果,以便可以更轻松地查看整体模式。
me@machine:~$ ls Level*.jpg | sort -t_ -k2n -k3n -k4n
Level_1_1_1.jpg
Level_1_1_2.jpg
Level_1_1_3.jpg
Level_1_1_4.jpg
Level_1_1_5.jpg
Level_1_2_1.jpg
Level_1_2_2.jpg
Level_1_2_3.jpg
Level_1_2_4.jpg
Level_1_2_5.jpg
Level_1_3_1.jpg
...
Level_1_10_5.jpg
Level_2_1_1.jpg
...
Level_2_1_5.jpg
Level_2_2_1.jpg
...
Level_2_2_5.jpg
Level_2_3_1.jpg
...
Level_2_10_5.jpg
Level_3_1_1.jpg
关于bash - 使用多个排序键对文件列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59383900/