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

File Emacs lisp:如何获取目录中的最新文件?,file,emacs,directory,elisp,File,Emacs,Directory,Elisp,给定目录的路径,如何返回该目录中最新文件的路径?使用: 使用内置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"

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

使用:


使用内置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"

如果您还需要子目录下的文件,请递归使用
目录文件
,而不是
目录文件
。如果要排除目录,请先使用
file-directory-p

过滤文件/目录列表(如果要在没有依赖项的情况下进行过滤)

  • 目录文件和属性
    为我们提供了带有属性的文件和目录列表
    • 第四个arg
      NOSORT
      是一个bool,它没有像上面的答案所显示的那样使用函数
    (目录文件和属性目录&可选完全匹配NOSORT) ID格式)
    如果NOSORT为非nil,则列表不会排序——其顺序不可预测。 如果您计划自己对结果进行排序,则NOSORT非常有用

    • 属性的格式为
      文件属性
      ——这为我们提供了修改时间以及项目是文件还是目录
  • t表示目录,字符串(名称链接到)表示符号链接,或nil\
  • 上次修改时间也一样。这是最后一次
(汽车
(seq find)
'(lambda(x)(非第n个1 x));非目录
(分类
(目录文件和属性路径“完全为零”)
'(λ(xy)(无时间-p(第n个5y)(第n个5x()())));最后修改的第一个:y
请注意,此算法需要
N*log(N)*磁盘访问,其中
N`是目录中的文件数。@sds我使用
目录文件
直接更新了我的答案,而不是自己排序。
file-newer-than-file-p
访问磁盘两次。我明白了,应在emacs 26.1中使用
目录文件和属性
目录文件的帮助
声称指定第4个参数会导致未排序的列表,该列表为
nil
或未指定的排序方式为
string lessp
(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"