在 Linux 系统中,有时我们需要查看哪些文件或目录最近被修改过,或者按照修改时间排序全盘文件来排查系统变更、跟踪配置、或制定备份策略。
本文将介绍如何使用 find、sort 和 awk 等命令,将文件及目录按修改时间排序,并以人类可读格式输出。可用于审计、日志分析、系统管理等场景。
🛠 需求背景
假设你想:
- 查看某个目录(如
/home)下,包括所有子目录与文件; - 这些内容要按照修改时间排序;
- 时间必须是人类可读格式,如
2025-08-03 14:20:55; - 显示新修改的内容排在最前面(从新到旧)。
✅ 推荐命令:可读时间 + 排序 + 显示目录和文件
find /your/path -printf '%T@|%p\n' 2>/dev/null | sort -nr | awk -F'|' '{
cmd="date -d @"$1" \"+%Y-%m-%d %H:%M:%S\"";
cmd | getline time;
close(cmd);
print time, $2
}'
将 /your/path 替换为你要检查的目录路径(如 /home、/var/log 等)。
📌 输出示例:
2025-08-03 14:20:55 /home/user/.config/some_app/settings.conf
2025-08-03 14:18:07 /home/user/Documents/report.docx
2025-08-03 13:47:30 /home/user/Downloads/archive.zip
...
📘 参数解释
| 组件 | 含义 |
|---|---|
find /your/path | 遍历目标路径下所有文件与目录 |
| `-printf ‘%T@ | %p\n’` |
sort -nr | 按时间戳从新到旧排序 |
| `awk -F’ | ‘` |
📤 可选:将结果输出到文件
... > ~/file-change-log.txt
示例:
find /var/log -printf '%T@|%p\n' 2>/dev/null | sort -nr | awk -F'|' '{
cmd="date -d @"$1" \"+%Y-%m-%d %H:%M:%S\"";
cmd | getline time;
close(cmd);
print time, $2
}' > ~/log-change-history.txt
⚠ 注意事项
- 某些目录可能无权限访问,可加
sudo运行: bashCopyEditsudo find /etc -printf ... - 命令运行速度取决于文件数量,避免在根目录
/全盘遍历,除非你明确知道自己在做什么。 - 在非 GNU 系统(如 macOS)中,需用
gdate替代date(可通过brew install coreutils安装)。
🧩 延伸用途
✅ 最近修改的前 20 个文件或目录:
... | head -n 20
✅ 筛选某类型文件(如 .log):
find /var/log -name "*.log" -printf '%T@|%p\n' ...
✅ 总结
通过组合 find、sort 与 awk,我们可以灵活、清晰地列出系统中的所有文件与目录,按修改时间排序。它适用于:
- 配置变更追踪
- 系统安全审计
- 自动化备份
- 用户操作分析
掌握这类命令,是每位 Linux 用户和系统管理员的基础技能之一。