#!/usr/bin/python

# lower_case_file_names.py
#       --copyright--                   Copyright 2008 (C) Tranzoa, Co. All rights reserved.    Warranty: You're free and on your own here. This code is not necessarily up-to-date or of public quality.
#       --url--                         http://www.tranzoa.net/tzpython/
#       --email--                       pycode is the name to send to. tranzoa.com is the place to send to.
#       --bodstamps--
#       June 1, 2008            bar
#       --eodstamps--
##      \file
#
#
#       Convert all matching file names to lower case.
#
#

import  glob
import  os
import  re
import  sys

import  TZCommandLineAtFile
import  tzlib



uc_re   =   re.compile(r"[A-Z]")


class a_thang :


    def _parse_cmd_line(me) :
        """
            Parse command line parameters
        """


        def __cmd_line_help() :
            print """
I convert all matching file names to lower case.

Tell me (ambiguous) file names or a directory names.

Options:

  --subdirs or  -s      Do sub-directories.
            """

            pass



        del sys.argv[0]

        TZCommandLineAtFile.expand_at_sign_command_line_files(sys.argv)


        while True :
            oi  = tzlib.array_find(sys.argv, [ "--subdirs", "-s" ] )
            if  oi < 0 :    break
            del sys.argv[oi]
            me.do_subdirs   = True


        while True :
            oi  = tzlib.array_find(sys.argv, [ "--help", "-h", "-?", "/?" ] )
            if  oi < 0 :    break
            del sys.argv[oi]
            __cmd_line_help()
            sys.exit(101)

        pass


    def __init__(me) :
        me.do_subdirs       =   False

        me.base_amb_name    =   ""

        me._parse_cmd_line()



    def print_dir_entry(me, fname) :
        bname   = os.path.split(fname)[1]
        if  uc_re.search(bname) :
            os.rename(fname, fname.lower())
        pass


    pass





def print_em(me, s) :
    for fname in glob.glob(s) :
        me.print_dir_entry(fname)
    pass



def print_dir(me, s, names) :
    if  me.base_amb_name :
        print_em(me, os.path.abspath(os.path.join(s, me.base_amb_name)))
    else :
        print_em(me, os.path.abspath(os.path.join(s, "*.*")))
    pass



#
#
if __name__ == '__main__' :
    me = a_thang()

    for s in sys.argv :

        if me.do_subdirs :
            if  not os.path.isdir(s) :
                ( s, me.base_amb_name ) = os.path.split(os.path.normpath(s))
                if  s == "" :   s = "."
                if  not os.path.isdir(s) :
                    print_dir(me, s, [] )
                else :
                    os.path.walk(s, print_dir, me)
                pass
            else :
                os.path.walk(s, print_dir, me)
            pass

        elif    not os.path.isdir(s) :
            print_em(me, s)

        else :
            print_dir(me, s, [])

        pass

    pass

#
#
#
# eof

