bash - 使用多个排序键对文件列表进行排序

标签 bash

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

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/

相关文章:

bash - 使用 date 命令获取下个月?

java - 在 unix 机器上渲染美国单位分隔符

linux - 从 BASHRC 解析函数

linux - 统计最近 7 天内文件中出现的次数

linux - 使用脚本读取数字的最简单方法

c - 在c中与ncurses异步运行bash命令

mysql - 在 bash 中将 stdout 重定向到 mysql

linux - 用户正在使用 bash 运行的进程数

bash - 获取 bash 列中唯一值的计数

bash - 您如何使用内置的纯未设置外壳程序?您可以编写不受篡改的shell脚本吗?