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
推荐阅读
- c# - TimeZoneInfo.ConvertTimeFromUtc 返回错误的值
- python - 带有实例变量的 pydantic BaseModel
- python - Python Pandas:如何将数据框最后一行中的日期与另一个数据框中的一系列日期进行比较
- node.js - 用户验证失败:名称:转换为字符串的值失败
- mongodb - 在多个 goroutine 中使用一个 MongoDB 连接
- angular - 页面网址的 Angular 移除服务工作者
- shell - 如何通过多次过滤或搜索提取数据并获取多行使用 bash 脚本
- angular - *ngFor 内的 Angular [ngClass] 用于选定项目
- macos - 如何在 osx 上显示 gimp 图像预览图标
- vue.js - 动态设置 v-model