在 Linux 系统中,有时我们需要查看哪些文件或目录最近被修改过,或者按照修改时间排序全盘文件来排查系统变更、跟踪配置、或制定备份策略。

本文将介绍如何使用 findsortawk 等命令,将文件及目录按修改时间排序,并以人类可读格式输出。可用于审计、日志分析、系统管理等场景。


🛠 需求背景

假设你想:

  • 查看某个目录(如 /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' ...

✅ 总结

通过组合 findsortawk,我们可以灵活、清晰地列出系统中的所有文件与目录,按修改时间排序。它适用于:

  • 配置变更追踪
  • 系统安全审计
  • 自动化备份
  • 用户操作分析

掌握这类命令,是每位 Linux 用户和系统管理员的基础技能之一。

Leave a Reply

Your email address will not be published. Required fields are marked *