let id = ref 0 let rec go dir_name par_id = Unix.chdir dir_name; incr id; let id = !id in Printf.printf "D %d %d %s\n" id par_id dir_name; let d = Unix.opendir "." in let dirs = ref [] in let rec loop () = let f = Unix.readdir d in let st = Unix.lstat f in let _ = match f.[0], st.Unix.st_kind with | '.', _ -> () | _, Unix.S_DIR -> dirs := f :: !dirs | _, Unix.S_REG -> Printf.printf "F %d %s\n" st.Unix.st_size f | _ -> () in loop () in begin List.iter (fun f -> go f id) (try loop () with End_of_file -> Unix.closedir d; !dirs) end; Unix.chdir ".." let _ = Printf.printf "R 0 .\n"; go "." 0