let rec remove_directory_contents_rec dir =
  let entries = readdir dir
  in
    forA entries
      (fun entry ->
         let path = Filename.concat dir entry
         in
           if is_directory path
           then (remove_directory_contents_rec path; Unix.rmdir path)
           else Unix.unlink path)