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
是一个bool,它没有像上面的答案所显示的那样使用函数NOSORT
如果NOSORT为非nil,则列表不会排序——其顺序不可预测。 如果您计划自己对结果进行排序,则NOSORT非常有用- 属性的格式为
——这为我们提供了修改时间以及项目是文件还是目录文件属性
- 第四个arg
- 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"