繁体   English   中英

Emacs lisp:如何获取目录中的最新文件?

[英]Emacs lisp: How can I get the newest file in a directory?

给定目录的路径,如何返回该目录中最新文件的路径?

使用内置 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是一个布尔值,并且不采用最佳答案所暗示的函数

    (目录文件和属性目录和可选的 FULL MATCH NOSORT ID-FORMAT)
    如果 NOSORT 非零,则列表未排序——其顺序是不可预测的。 如果您计划自己对结果进行排序,则 NOSORT 很有用。

    • 属性采用file-attributes的格式 - 这为我们提供了修改时间以及项目是文件还是目录
    1. t 用于目录,字符串(链接到的名称)用于符号链接,或 nil。\\
    2. 上次修改时间也一样。 这是最后的时间
(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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM