给定目录的路径,如何返回该目录中最新文件的路径?
使用内置 API 也可以实现:
(defun latest-file (path)
"Get latest file (including directory) in PATH."
(car (directory-files path 'full nil #'file-newer-than-file-p)))
(latest-file "~/.emacs.d") ;; => "/Users/xcy/.emacs.d/var"
如果还需要子目录下的文件,请使用 directory-files-recursively
而不是 directory-files
。如果要排除目录,请先使用 file-directory-p
过滤文件/目录列表。
使用 f:
(defun aj-fetch-latest (path)
(let ((e (f-entries path)))
(car (sort e (lambda (a b)
(not (time-less-p (aj-mtime a)
(aj-mtime b))))))))
(defun aj-mtime (f) (let ((attrs (file-attributes f))) (nth 5 attrs)))
如果你想在没有依赖的情况下做到这一点
-
directory-files-and-attributes
为我们提供了带有属性的文件和目录列表- 第 4 个 arg
NOSORT
是一个布尔值,不像顶部答案所暗示的那样采用函数
(目录文件和属性目录和可选完全匹配 NOSORTID 格式)
如果 NOSORT 为非 nil,则列表不排序 - 其顺序不可预测。如果您打算自己对结果进行排序,NOSORT 很有用。- 属性采用
file-attributes
格式 - 这为我们提供了修改时间以及项目是文件还是目录
- t 表示目录,字符串(链接到的名称)表示符号链接,或 nil。
- 上次修改时间也是如此。 这是最后一次的时候
- 第 4 个 arg
(car
(seq-find
'(lambda (x) (not (nth 1 x))) ; non-directory
(sort
(directory-files-and-attributes path 'full nil t)
'(lambda (x y) (time-less-p (nth 5 y) (nth 5 x)))))) ; last modified first: y < x