val is_dir_empty: string -> bool (** checks if the dir is empty *)
val rmdir_descend: string -> unit (** rmdir -p *)
val chmod: int -> string -> unit (** chmod *)
+val normalize_path: string -> string (** /foo/./bar/..//baz -> /foo/baz *)
(** find all _files_ whose name matches test under a filesystem root.
* Test is passed the filename path relative to the given filesystem root *)
val find: ?test:(string -> bool) -> string -> string list
+ (** find_in paths name returns the first path^"/"^name such that
+ * is a regular file and the current user can 'stat' it.
+ * May raise (Failure "find_in") *)
+val find_in: string list -> string -> string
+
(** {2 File I/O} *)
val input_file: string -> string (** read all the contents of file to string *)
(* size in KB (SLOW) *)
val estimate_size: 'a -> int
+(* is_prefix_of [prefix] [string], in terms of dirs:
+ * foo/bar/ is prefix of foo/bar/baz
+ * foo/bar is prefix of foo/bar/baz
+ * foo/b isn't of foo/bar/baz
+ * foo/bar is prefix of foo/bar
+ *)
+val is_prefix_of: string -> string -> bool
+val chop_prefix: string -> string -> string
+val touch: string -> unit