Search code examples
pythonloggingcopyingiteration

How do I iteratively copy logs from the local drive to a network share?


I'm new to Python. I'm running version 3.3. I'd like to iteratively copy all wildcard named folders and files from the C drive to a network share. Wildcard named folders are called "Test_1", "Test_2", etc. with folders containing the same named folder, "Pass". The files in "Pass" end with .log. I do NOT want to copy the .log files in the Fail folder. So, I have this:

C:\Test_1\Pass\a.log
C:\Test_1\Fail\a.log
C:\Test_1\Pass\b.log
C:\Test_1\Fail\b.log
C:\Test_2\Pass\y.log
C:\Test_2\Fail\y.log
C:\Test_2\Pass\z.log
C:\Test_2\Fail\z.log

but only want to copy

C:\Test_1\Pass\a.log
C:\Test_1\Pass\b.log
C:\Test_2\Pass\y.log
C:\Test_2\Pass\z.log

to:

\\share\Test_1\Pass\a.log
\\share\Test_1\Pass\b.log
\\share\Test_2\Pass\y.log
\\share\Test_2\Pass\z.log'

The following code works but I don't want to copy tons of procedural code. I'd like to make it object oriented.

import shutil, os
from shutil import copytree
def main():
    source = ("C:\\Test_1\\Pass\\")
    destination = ("\\\\share\\Test_1\\Pass\\")
    if os.path.exists ("C:\\Test_1\\Pass\\"):
        shutil.copytree (source, destination)
        print ('Congratulations!  Copy was successfully completed!')
    else:
        print ('There is no Actual folder in %source.')
main()

Also, I noticed it is not printing the "else" print statement when the os path does not exist. How do I accomplish this? Thanks in advance!


Solution

  • This is not a perfect example but you could do this:

    import glob, os, shutil
    
    #root directory
    start_dir = 'C:\\'
    
    def copy_to_remote(local_folders, remote_path):
        if os.path.exists(remote_path):    
            for source in local_folders:
                # source currently has start_dir at start. Strip it and add remote path
                dest = os.path.join(remote_path, source.lstrip(start_dir))
                try:
                    shutil.copytree(source, dest)
                    print ('Congratulations!  Copy was successfully completed!')
                except FileExistsError as fe_err:
                    print(fe_err)
                except PermissionError as pe_err:
                    print(pe_err)
        else:
            print('{} - does not exist'.format(remote_path))
    
    
    
    # Find all directories that start start_dir\Test_ and have subdirectory Pass
    dir_list = glob.glob(os.path.join(start_dir, 'Test_*\\Pass'))
    if dir_list:
        copy_to_remote(dir_list, '\\\\Share\\' )
    

    Documentation for glob can be found here.