Advertisement
Guest User

Untitled

a guest
Aug 3rd, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. open Core
  2.  
  3. let rec archive ~src ~dst =
  4.   if not (Sys.is_directory src) then failwithf "%s: not a directory" src ();
  5.   try Unix.unlink dst with _e -> ();
  6.   try Unix.mkdir dst with _e -> ();
  7.   List.iter (Sys.ls_dir src) ~f:(fun fn ->
  8.     let srcf = src ^/ fn and dstf = dst ^/ fn in
  9.     if Sys.is_directory srcf then archive ~src:srcf ~dst:dstf
  10.     else begin
  11.       Out_channel.write_all dstf ~data:(Ezgzip.compress ~level:9 (In_channel.read_all srcf));
  12.       let st = Unix.stat srcf in
  13.       Unix.utimes dstf ~access:st.Unix.st_atime ~modif:st.Unix.st_mtime
  14.     end)
  15. ;;  
  16.  
  17. let () =
  18.   archive ~src:"/a" ~dst:"b"
  19. ;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement