let rec mv ?(force=Force) fln_src fln_dst =
    let fln_src_abs =  make_absolute (pwd ()) fln_src
    in
    let fln_dst_abs =  make_absolute (pwd ()) fln_dst
    in
    if compare fln_src_abs fln_dst_abs <> 0 then
      if test Exists fln_dst_abs then
        if doit force fln_dst then
        (
          rm [fln_dst_abs];
          mv fln_src_abs fln_dst_abs
        )
        else
          ()
      else if test Is_dir fln_dst_abs then
        mv ~force:force 
          fln_src_abs
          (make_absolute fln_dst_abs (basename fln_src_abs))
      else if test Exists fln_src_abs then
        Sys.rename fln_src_abs fln_src_abs
      else
        raise MvNoSourceFile
    else
      ()