Linux中的排序命令sort

在给学生上完课后,我需要将希沃白板的板书保存下来,合成为一个 PDF 文件,发送给学生,以便学生能够及时复习。但是,在板书超过10页后,发现直接使用 magick 命令合成,那第 10页会跑到第1页前面,于是我修改文件名后完成了操作。但是这也太麻烦了,于是决定编写一个脚本自动处理合成任务,其中的关键是根据 seewo 白板按时间加页码命名的默认方式进行排序。为了完成正确的排序,需要借助sort 命令。

sort 命令简介

排序需求 命令示例 说明
默认字典序(ASCII顺序) ls \| sort 最基本排序,大写字母(A-Z)排在小写字母(a-z)之前。
智能版本序(含数字时推荐) ls \| sort -V 能识别数字并按数值大小排,将 1, 2, 10 排成 1, 2, 10(而不是 1, 10, 2)。
忽略大小写 ls \| sort -f 将 a.png 和 B.png 视为相同字母排序。
按修改时间(时间倒序) ls -t 注意:这是 ls 命令的参数 (-t),不是 sort 的功能。
反转排序结果 ls \| sort -r -r 参数可与其他参数组合,如 sort -Vr 为版本序反转。

核心用法

sort 通常不直接操作文件,而是对它接收到的文本输入流进行排序。因此,你需要先用 ls、find 或 echo 生成文件列表,再通过管道 | 传给 sort。

图片合成 pdf 命令

1
magick $(ls *.png | sort -V) output.pdf

进阶技巧

如果你想获得类似文件管理器那种“按名称排序,但文件夹在前”的列表,可以结合 ls 和 sort:

1
ls -la | sort -k 9  # 按第9列(默认文件名列)排序

注:这种方法比较脆弱,因为 ls -l 的输出格式固定,列位置可能因系统而异。