Linux bash下如何在列出当前路径所有文件时高亮最近N分钟修改的文件
实现全量ls输出并高亮近N分钟修改文件的方案
方案1:grep+find 单行命令实现
直接执行以下命令即可输出ls -al的全量结果,同时高亮最近60分钟内修改的文件:
ls -al | grep --color=always -E "$(find . -maxdepth 1 -mmin -60 -printf '%f\n' | grep -v '^\.$' | sed 's/[][()\.^$*+?{}|]/\\&/g' | tr '\n' '|' | sed 's/|$//')|$"
需要调整时间范围时,把-mmin -60里的60替换为你需要的分钟数即可。
方案2:封装为shell函数方便长期使用
把以下内容写入你的~/.bashrc(bash用户)或~/.zshrc(zsh用户),重载配置后即可直接调用:
lsh() { # 第一个参数为指定的分钟数,不填默认60分钟 local target_min="${1:-60}" ls -al | grep --color=always -E "$(find . -maxdepth 1 -mmin -"${target_min}" -printf '%f\n' | grep -v '^\.$' | sed 's/[][()\.^$*+?{}|]/\\&/g' | tr '\n' '|' | sed 's/|$//')|$" }
使用示例:
- 执行
lsh:高亮最近60分钟修改的文件 - 执行
lsh 30:高亮最近30分钟修改的文件
方案3:自定义高亮颜色(awk实现)
如果需要调整高亮颜色,可使用awk注入ANSI颜色码实现,以下示例为亮红色高亮,修改color变量的数值即可换色:
ls -al | awk -v target_min=60 -v color="\033[1;31m" -v reset="\033[0m" ' NR==FNR { if ($0 != ".") mod_file[$0] = 1; next } { out = $0 for (f in mod_file) { if (index(out, f)) gsub(f, color f reset, out) } print out }' <(find . -maxdepth 1 -mmin -60 -printf '%f\n')
常用颜色码参考:
- 亮红色:
1;31 - 亮绿色:
1;32 - 亮黄色:
1;33 - 亮蓝色:
1;34
注意事项
- 上述方案均默认仅扫描当前目录(不递归子目录),和
ls -al的默认行为一致 - 已兼容带特殊字符的普通文件名,极端场景下(如文件名含换行符)可能会出现匹配偏差
内容的提问来源于stack exchange,提问作者Defisher
相关产品推荐
相关产品推荐

