User Tools

Site Tools


Rename files with Ocaml

dir.ml
(*
 * Author, Copyright: Oleg Borodin <onborodin@gmail.com>
 *)
 
open Str
open Filename
open Unix
 
let ext = ".png"
let tm time = Unix.localtime time
 
let timestamp tm = Printf.sprintf
    "%04d-%02d-%02d-%02d:%02d"
    (tm.tm_year + 1900) tm.tm_mon tm.tm_mday
    tm.tm_hour tm.tm_min
 
let regex = Str.regexp "^[a-zA-Z0-9_\\-]+.[pP][nN][gG]$"
let is_png name = Str.string_match regex name 0
let process name =
    if not (Sys.is_directory name) then
    if is_png name then
        let dirname = Filename.dirname name in
        let basename = Filename.basename name in
        let basename = Filename.remove_extension basename in
        let stat = Unix.stat name in
        let new_filename = (("greenwood-" ^ timestamp (tm stat.st_ctime)) ^ "-" ^ basename ^ ext) in
            print_endline (dirname ^ "/" ^ new_filename)
 
let main () =
    if (Array.length Sys.argv) > 1 then
        let dir_list = Sys.readdir (Sys.argv.(1)) in
            Array.iter process dir_list;;
 
main ()
$ ocamlc -o dir str.cma unix.cma dir.ml
$ ./dir .
./greenwood-2020-05-30-11:11-hFpmUVQXEn8.png