diff --git a/src/libraries/utils/filepath.ml b/src/libraries/utils/filepath.ml
index 6c24bf4aff1bd875eba4fb49d716917803175080..3689f5a2ef24f4fb75fffb52e171919c0f9f1b91 100644
--- a/src/libraries/utils/filepath.ml
+++ b/src/libraries/utils/filepath.ml
@@ -337,6 +337,20 @@ type position =
 let pp_pos fmt pos =
   Format.fprintf fmt "%a:%d" Normalized.pretty pos.pos_path pos.pos_lnum
 
+let exists (s : Normalized.t) = Sys.file_exists (s :> string)
+
+let is_dir (s : Normalized.t) = Sys.is_directory (s :> string)
+
+let readdir (s : Normalized.t) = Sys.readdir (s :> string)
+
+let remove (s : Normalized.t) = Sys.remove (s :> string)
+
+let rename s t = Sys.rename s t
+
+let basename p = Filename.basename p
+
+let dirname p = Filename.dirname p
+
 (*
 Local Variables:
 compile-command: "make -C ../../.."
diff --git a/src/libraries/utils/filepath.mli b/src/libraries/utils/filepath.mli
index ed6d96033cba38422aa88004c828af72019b8396..451937d4da7487ce520fa3fd0f9ffd9f64eb59c2 100644
--- a/src/libraries/utils/filepath.mli
+++ b/src/libraries/utils/filepath.mli
@@ -216,6 +216,41 @@ val pp_pos : Format.formatter -> position -> unit
 *)
 val pwd : unit -> string
 
+(** Equivalent to [Sys.file_exists].
+    @since Frama-C+dev
+*)
+val exists: Normalized.t -> bool
+
+(** Equivalent to [Sys.is_directory].
+    @since Frama-C+dev
+*)
+val is_dir: Normalized.t -> bool
+
+(** Equivalent to [Sys.readdir].
+    @since Frama-C+dev
+*)
+val readdir: Normalized.t -> string array
+
+(** Equivalent to [Sys.remove].
+    @since Frama-C+dev
+*)
+val remove: Normalized.t -> unit
+
+(** Equivalent to [Sys.rename].
+    @since Frama-C+dev
+*)
+val rename: Normalized.t -> Normalized.t -> unit
+
+(** Equivalent to [Filename.basename].
+    @since Frama-C+dev
+*)
+val basename: Normalized.t -> string
+
+(** Equivalent to [Filename.dirname].
+    @since Frama-C+dev
+*)
+val dirname: Normalized.t -> Normalized.t
+
 (*
   Local Variables:
   compile-command: "make -C ../../.."