一個簡單的遞歸函數,可以遍歷目錄樹中的所有文件,傳遞另一個處理函數,該函數可以接受文件路徑作為參數,從而決定如何處理。
下面是調用例子:
#!/usr/bin/newlisp
(load "file.lsp") (define (show-file file-path) (println (string file-path ": " (file-info file-path))) ) (FILE:recursive-access-dir "/opt/" show-file)
(exit)
recursive-access-dir就是遞歸函數, show-file是另一個函數,顯示了接收的文件路徑和file-info信息。
(context 'FILE)
(define (recursive-access-dir dir-path file-op) (dolist (nde (directory dir-path {^[^.]})) (if (directory? (append dir-path nde)) (recursive-access-dir (append dir-path nde "/") file-op) (file-op (append dir-path nde)))))
注意:
正則表達式 ^[^.] 代表只查找不以.開頭的文件或者目錄,因此排除了. 和 ..
該遞歸算法是深度優先算法,一旦發現一個目錄,一定會將其下的所有路徑都遍歷完才會返回到開始, 然後才處理下一個兄弟目錄。
為Emacs配置newLISP開發環境 http://www.linuxidc.com/Linux/2013-01/78463.htm
newLISP做GitLab系統備份 http://www.linuxidc.com/Linux/2013-01/78464.htm
newLISP 遍歷目錄樹,清理編譯目錄 http://www.linuxidc.com/Linux/2013-08/88954.htm
newLISP 的詳細介紹:請點這裡
newLISP 的下載地址:請點這裡