首页 > 解决方案 > 具有多个排序键的文件排序列表

问题描述

我希望能够列出由多个排序键排序的目录中的所有文件。例如:

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

标签: bash

解决方案


我取了一小部分文件名样本。当您_使用该-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

推荐阅读