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 的输出格式固定,列位置可能因系统而异。