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