You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Tcl中按mtime(修改时间)获取按新旧排序的文件列表?

用Tcl按文件修改时间从旧到新排序文件列表(无需自定义函数)

嘿,刚好知道怎么解决这个问题!Tcl确实没给glob或lsort直接加按mtime排序的参数,但咱们可以用内置命令的组合来实现,完全不用写自定义函数。

核心思路是把每个文件和它的修改时间戳绑定成列表,再用lsort按时间戳排序,最后提取文件名就行:

分步实现

  1. 获取目标目录下的文件列表(如果要排除目录,加-type f参数):
set file_list [glob -nocomplain -type f *]
  1. 把每个文件和它的修改时间戳(Unix整数格式)组成子列表:
set files_with_mtime [lmap f $file_list {list [file mtime $f] $f}]
  1. 按时间戳升序排序(从旧到新),这里用-integer确保数字排序准确,-index 0指定按子列表的第一个元素(时间戳)排序:
set sorted_pairs [lsort -integer -index 0 $files_with_mtime]
  1. 从排序后的子列表里提取文件名:
set sorted_files [lmap pair $sorted_pairs {lindex $pair 1}]

一键简化版

如果觉得分步太麻烦,可以把这些命令合并成一行,更简洁:

set sorted_files [lmap pair [lsort -integer -index 0 [lmap f [glob -nocomplain -type f *] {list [file mtime $f] $f}]] {lindex $pair 1}]

补充说明

  • file mtime返回的是从1970年1月1日到现在的秒数,是整数,所以用-integer排序能保证顺序完全正确。
  • -nocomplain参数是为了避免在目录为空时抛出错误,如果你确定目录有文件,可以去掉它。
  • 如果需要从新到旧排序,只需要给lsort加-decreasing参数就行:
set sorted_files_newest_first [lmap pair [lsort -integer -index 0 -decreasing $files_with_mtime] {lindex $pair 1}]

内容的提问来源于stack exchange,提问作者Jonjilla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:55:48