ディレクトリ内のすべてのファイルを再帰的に処理する - lisp-cookbook-ja/common-lisp GitHub Wiki

入出力

処理系がワイルドカード文字をどう扱うか

OSの種類

OSがワイルドカード文字をどう扱うか

等々の組み合わせ状況により結果が変わってくる可能性がありますが、CLのパス名には、任意の数のディレクトリにマッチさせる"**"という表現がありますので、directoryでディレクトリ内のファイルにマッチさせ、それをマップ関数等で処理することができます。

;; /home/CLer/lisp/以下の *.*~にマッチするすべてのファイル
(length
 (directory "/home/CLer/lisp/**/*.*~"))
;=> 1234(サンプル結果)
;; パス名を印字
(map nil 
     #'print
     (directory "/home/CLer/lisp/**/*.*"))
;-> #P"/home/CLer/lisp/Scratch/scm-2007-01-21.scm.~1~"
;   #P"/home/CLer/lisp/bolio/bolio.lisp
;   #P"/home/CLer/lisp/bolio/bolio.lisp.~2~"
;   #P"/home/CLer/lisp/bolio/cadr.lisp
;   #P"/home/CLer/lisp/bolio/common.lisp.~1~"
;   #P"/home/CLer/lisp/bolio/common.lisp.~2~"
;   #P"/home/CLer/lisp/bolio/common.lisp.~3~"
;   #P"/home/CLer/lisp/bolio/lmm-settings.lisp.~1~"
;   #P"/home/CLer/lisp/cl-2007-01-19.lisp
;   #P"/home/CLer/lisp/cl-2007-01-20.lisp.~1~"
;....
;=> NIL

また、処理系/OSの差を吸収することを目的としたコンパチブルレイヤのパッケージとしては、CLiki:CL-FADがありますので、このようなものを利用することで可搬性が高められるかもしれません。

(cl-fad:walk-directory "/home/CLer/lisp/" #'print)
;-> #P"/home/CLer/lisp/Scratch/scm-2007-01-21.scm.~1~"
;   #P"/home/CLer/lisp/bolio/bolio.lisp
;   #P"/home/CLer/lisp/bolio/bolio.lisp.~2~"
;   #P"/home/CLer/lisp/bolio/cadr.lisp
;   #P"/home/CLer/lisp/bolio/common.lisp.~1~"
;   #P"/home/CLer/lisp/bolio/common.lisp.~2~"
;   #P"/home/CLer/lisp/bolio/common.lisp.~3~"
;   #P"/home/CLer/lisp/bolio/lmm-settings.lisp.~1~"
;   #P"/home/CLer/lisp/cl-2007-01-19.lisp
;   #P"/home/CLer/lisp/cl-2007-01-20.lisp.~1~"
;....
;=> NIL

参考

議論