在日常使用 Linux 的过程中,我们经常需要查看某个目录下的文件或子目录,并根据它们的时间顺序进行排序。比如你可能想要找出最早创建的日志文件,或者按照文件修改时间梳理一个项目的更新轨迹。
本文将介绍如何在 Linux 系统中 按照时间顺序从早到晚排列文件和目录,以及如何根据不同需求(例如修改时间、创建时间等)做出相应调整。
一、最常用方法:ls -ltr
最简单、最常用的命令就是:
ls -ltr
这条命令会列出当前目录下的所有文件和子目录,并按 最后修改时间从早到晚 排列。
参数解析:
-l:使用长格式显示(包含权限、用户、时间等信息)-t:按照修改时间排序(默认是最新的文件在前)-r:反转排序结果,从早到晚排列
示例:
$ ls -ltr
-rw-r--r-- 1 user user 0 2024-06-01 10:00 old_file.txt
-rw-r--r-- 1 user user 0 2024-07-01 12:00 middle_file.txt
-rw-r--r-- 1 user user 0 2025-08-01 09:00 new_file.txt
二、将目录排在前面:--group-directories-first
如果你希望把目录列在最前面,其余按时间排序,可以加上 --group-directories-first:
ls -ltr --group-directories-first
这样输出会先列出目录,再列出文件,依然保持时间从早到晚的排序。
三、只列出文件并按时间排序:使用 find 和 stat
如果你只关心文件,而不想看到目录,可以使用 find 命令结合 stat 来达到更精确的控制:
find . -type f -printf "%T@ %p\n" | sort -n
含义:
find . -type f:查找当前目录及其子目录中的所有文件-printf "%T@ %p\n":打印出时间戳和路径sort -n:按时间戳从小到大排序(即从早到晚)
如果你只想看文件名(不含时间戳):
find . -type f -printf "%T@ %p\n" | sort -n | cut -d' ' -f2-
四、关于“创建时间”的说明(ctime ≠ 创建时间)
你可能会问:“我能按照文件的创建时间排序吗?”
答案是:通常不行,因为大多数 Linux 文件系统(如 ext4)并不记录文件的创建时间。
不过,如果你的系统使用的是支持创建时间的文件系统(例如 btrfs 或 xfs),并使用了 statx 工具,可以尝试:
statx -c '%W %n' *
然后再用 sort 处理。
五、小结
| 需求 | 命令 |
|---|---|
| 按修改时间从早到晚排序所有文件/目录 | ls -ltr |
| 将目录排在文件前面 | ls -ltr --group-directories-first |
| 只列出文件并按时间排序 | find . -type f -printf "%T@ %p\n" | sort -n |
| 尝试获取创建时间排序(有局限) | statx -c '%W %n' *(需要支持的文件系统) |
通过以上方法,你可以根据自己的实际需求灵活地对 Linux 文件和目录进行时间排序,无论是查看最旧的日志、排查最近的改动,还是整理项目文件,都会更加高效有序。