2007/05/20

Erlang ディレクトリ内のファイルを(再帰的に)処理する

filelib:fold_files/5 という関数があります。
1番目の引数がディレクトリ。
2番目が処理対象か否かを判定するための正規表現。
3番目がサブディレクトリも再帰的に処理するか否か。
4番目が各ファイルに適用する関数。
5番目が初期値。
4番目の引数である関数は引数を2つとります。最初の引数は処理対象のファイル。次は最初は5番目に指定した引数で、それ以降はこの関数の返り値です。

サフィックスが erl のファイルをリストにして取得するには次のように書きます。


>1 filelib:fold_files("/home/ancient/letter/erlang", "\\.erl$", true, fun(X, Acc) -> [X|Acc] end, []).
["/home/ancient/letter/erlang/a/fib.erl",
"/home/ancient/letter/erlang/chat/_darcs/pristine/chat.erl",
"/home/ancient/letter/erlang/chat/_darcs/pristine/test_chat.erl",
"/home/ancient/letter/erlang/chat/chat.erl",
[...]|...]

でも、へんにリンクがあるとだめです。

0 件のコメント: