Dato il percorso di una directory, come posso restituire il percorso del file più recente in quella directory?Emacs lisp: come posso ottenere il file più nuovo in una directory?
5
A
risposta
0
Utilizzando 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)))
6
Utilizzando le API built-in può raggiungere così:
(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"
Se si ha bisogno anche i file in sotto-directory, utilizzare directory-files-recursively
piuttosto che directory-files
. Se si desidera escludere le directory, filtrare innanzitutto l'elenco di file/directory utilizzando file-directory-p
.
nota che questo algoritmo richiede l'accesso al disco 'N * log (N) *, dove' N' è il numero di file nella directory. – sds
@sds Ho aggiornato la mia risposta usando 'directory-files' direttamente invece di ordinare me stesso. – xuchunyang
'file-newer-than-file-p' accede al disco due volte. – sds