Wie kann ich den Pfad der neuesten Datei in diesem Verzeichnis zurückgeben?Emacs Lisp: Wie bekomme ich die neueste Datei in einem Verzeichnis?
5
A
Antwort
0
Mit 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
Mit Einbau-APIs erzielen können auch:
(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"
Wenn Sie Dateien auch unter Unterverzeichnis muss, verwenden directory-files-recursively
statt directory-files
. Wenn Sie Verzeichnisse ausschließen möchten, filtern Sie die Datei/Verzeichnisliste zuerst mit file-directory-p
.
Beachten Sie, dass dieser Algorithmus 'N * log (N) * Festplattenzugriffe erfordert, wobei' N 'die Anzahl der Dateien im Verzeichnis ist. – sds
@sds Ich habe meine Antwort aktualisiert, indem ich 'directory-files' direkt benutze, anstatt mich selbst zu sortieren. – xuchunyang
'Datei-neuere-als-Datei-p' greift zweimal auf Platte zu. – sds