2015-06-17 7 views

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.

+0

Beachten Sie, dass dieser Algorithmus 'N * log (N) * Festplattenzugriffe erfordert, wobei' N 'die Anzahl der Dateien im Verzeichnis ist. – sds

+0

@sds Ich habe meine Antwort aktualisiert, indem ich 'directory-files' direkt benutze, anstatt mich selbst zu sortieren. – xuchunyang

+1

'Datei-neuere-als-Datei-p' greift zweimal auf Platte zu. – sds