You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BASH如何按文件名首段数字排序.sql文件,修复sort -V排序异常问题

文件名自定义排序解决方案

你之前使用的sort -V是版本自然排序规则,会将文件名中的整段数字作为整数进行全局大小比较,因此会出现31<32<41<42<310的排序结果,不符合你优先按数字首位分组、同组内按数值排序的需求。

方案1:使用sort自定义排序键(最简方案)

通过sort的分隔符和自定义排序键参数,直接实现需求:

find ./databases/ -iname 'file_*.sql' | sort -t '_' -k2.1,2.1 -k2n,2

参数说明:

  • -t '_':指定下划线_作为字段分隔符,拆分后文件名的第二个字段就是中间的数字段
  • -k2.1,2.1:第一个排序键取第二个字段的第一个字符,按字典序排序,实现3开头的数字整体排在4开头的数字之前
  • -k2n,2:第二个排序键取整个第二个字段,按数值排序,实现同首字符的数字按大小升序排列

方案2:awk预处理后排序(适配更复杂规则)

如果后续排序规则有更复杂的调整,可以用awk先提取排序特征值,排序后再还原文件名:

find ./databases/ -iname 'file_*.sql' | awk -F'_' '{print substr($2,1,1) " " $2 " " $0}' | sort -k1,1 -k2n | cut -d' ' -f3-

获取排序后的最后一个文件

在任意排序命令后追加tail -n1即可:

# 以方案1为例
find ./databases/ -iname 'file_*.sql' | sort -t '_' -k2.1,2.1 -k2n,2 | tail -n1

内容的提问来源于stack exchange,提问作者Isaac Caparrós González

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:18:03