let dir_find f path =
  let dir_handle = opendir path in
  let rec find () =
    let name = readdir dir_handle in
    if f name then name else find () in
  try
    try_finalize find () closedir dir_handle
  with End_of_file -> raise Not_found;;