Bir dizinin yolu verildiğinde, bu dizindeki en yeni dosyanın yolunu nasıl döndürebilirim? f kullanmaEmacs lisp: En yeni dosyayı bir dizinde nasıl alabilirim?
5
A
cevap
0
:
(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
yanı elde edebilirsiniz yerleşik API'leri kullanarak:
(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"
da alt dizin altında dosyaları ihtiyacı varsa, directory-files-recursively
yerine directory-files
kullanın. Dizinleri hariç tutmak isterseniz, önce dosya/dizin listesini file-directory-p
kullanarak filtreleyin.
bu algoritmanın 'N * log (N) * disk erişimlerini gerektirdiğini, burada' N' dizindeki dosyaların sayısı olduğunu unutmayın. – sds
@sds Yanıtımı kendim sıralamak yerine 'directory-files 'kullanarak güncelledim. – xuchunyang
'dosyadan daha yeni dosya-p', diske iki kez erişir. – sds