Emacs - 按修改日期排序目录/文件列表

时间:2014-10-22 18:22:53

标签: emacs elisp

函数(directory-files-and-attributes "~/" 'full nil t)为主目录创建未排序的文件和目录列表。结果似乎采用与file-attributes类似的格式,其文档可在以下链接中查看:https://www.gnu.org/software/emacs/manual/html_node/elisp/File-Attributes.html

此线程的目标是创建一个按修改日期/时间排序的列表 - 列表开头的最新列表,列表末尾的最旧列表。

最后,我想将详细列表转换为文件/目录的绝对路径的简单列表 - 保持与上述排序相同的顺序。

1 个答案:

答案 0 :(得分:6)

directory-files-and-attributes返回一个列表。值得庆幸的是,有许多Lisp函数可以转换列表。

首先,您希望通过比较每个条目的第6个元素来对列表进行排序。您可以使用本机Emacs Lisp sort函数来实现,该函数将比较函数作为第二个元素:

(sort (directory-files-and-attributes "~")
      #'(lambda (x y) (time-less-p (nth 6 x) (nth 6 y))))

使用Common Lisp排序函数可以更清楚地实现相同的目的:

(cl-sort (directory-files-and-attributes "~")
         #'time-less-p
         :key #'(lambda (x) (nth 6 x)))

现在您只想提取每个条目的第一个元素 - 使用mapcar将函数应用于列表的所有元素:

(mapcar #'car
        (sort (directory-files-and-attributes "~")
              #'(lambda (x y) (time-less-p (nth 6 x) (nth 6 y)))))