(************************************************************ sort_timerrec.ml Created : Wed Dec 27 22:49:58 2006 Last modified: Thu Dec 28 00:13:12 2006 Compile: ocamlc -dtypes sort_timerrec.ml -o sort_timerrec # FTP Directory: sources/ocaml # ************************************************************) (** sort MP3 file created by Talk Master II in the current directory by date @author Takashi Masuyama *) let timerrec_regexp = Str.regexp "^\\([0-9][0-9]\\)\\([0-9][0-9][0-9]\\)_\\([0-9][0-9][0-9][0-9][0-9][0-9]\\)_\\(.+MP3\\)$" let _ = let rec iter dir result = try let filename = Unix.readdir dir in if Str.string_match timerrec_regexp filename 0 then iter dir ((int_of_string (Str.matched_group 1 filename), int_of_string (Str.matched_group 2 filename), int_of_string (Str.matched_group 3 filename), (Str.matched_group 4 filename), filename)::result) else iter dir result with End_of_file -> result in let dir = Unix.opendir "." in let filelist = iter dir [] in Unix.closedir dir; let sorted_filelist = List.sort (fun (_, _, date1, _, _) (_, _, date2, _, _) -> compare date1 date2) filelist in let rec print_iter count result filelist = function [] -> (result, filelist) | (channelid, _, date, tail, original_filename)::tl -> let new_filename = Printf.sprintf "%02d%03d_%06d_%s" channelid count date tail in let (new_result, new_filelist) = if original_filename = new_filename then (result, original_filename::filelist) else let cmdline = Printf.sprintf "mv '%s' '%s'" original_filename new_filename in ((cmdline::result), (original_filename::new_filename::filelist)) in print_iter (count+1) new_result new_filelist tl in let (result, filelist) = print_iter 1 [] [] sorted_filelist in let sorted_filelist = List.sort compare filelist in let rec is_unique_list = function [] | [_] -> true | fst::((snd::_) as tl) -> if fst = snd then false else is_unique_list tl in if is_unique_list sorted_filelist then List.iter print_endline (List.rev result) else prerr_endline "Not unique list" (* * Local Variables: * namazu-default-dir:"/home/tak/.indexes/ocaml" * End: *)