open Unix;;
open Filename;;

let usage_string  =
  ("Usage: " ^ Sys.argv.(0) ^ " profondeur");;

let prerr_usage () =
  prerr_endline usage_string;;


let rec mon_find depth file =
  let dir_handle = opendir file in
  let rec rec_print_dir () =
    let name = readdir dir_handle in
    if name <> current_dir_name && name <> parent_dir_name then
      begin
        let full_name = (concat file namein
        print_endline full_name;
        if depth <> 1 then
          begin
            let stat = lstat full_name in
            if stat.st_kind = S_DIR then
              mon_find (depth - 1) full_name
          end;
      end;
    rec_print_dir () in
  try rec_print_dir () with
    End_of_file -> closedir dir_handle
  | e -> closedir dir_handleraise e;;

let mon_find1 () =
  if Array.length Sys.argv <> 2 then
    begin
      prerr_usage ();
      exit 1
    end
  else
    try
      let max_depth = int_of_string Sys.argv.(1) in
      print_endline current_dir_name;
      mon_find max_depth current_dir_name;
      exit 0
    with _ -> prerr_usage (); exit 1;;

handle_unix_error mon_find1 ();;