Search code examples
pythoncopyrenamemove

Python, Copy, Rename and run Commands


I have a little task for my company

I have multiple files which start with swale-randomnumber

I want to copy then to some directory (does shutil.copy allow wildmasks?)

anyway I then want to choose the largest file and rename it to sync.dat and then run a program.

I get the logic, I will use a loop to do each individual piece of work then move on to the next, but I am unsure how to choose a single largest file or a single file at all for that matter as when I type in swale* surely it will just choose them all?

Sorry I havnt written any source code yet, I am still trying to get my head around how this will work.

Thanks for any help you may provide


Solution

  • This might work :

    import os.path
    import glob
    import shutil
    
    source = "My Source Path" # Replace these variables with the appropriate data
    dest = "My Dest Path"
    command = "My command"
    
    # Find the files that need to be copied
    files = glob.glob(os.path.join(source, "swale-*"))
    
    # Copy the files to the destination
    for file in files:
         shutil.copy(os.path.join(source, "swale-*"), dest)
    
    # Create a sorted list of files - using the file sizes
    # biggest first, and then use the 1st item 
    biggest = sorted([file for file in files], 
            cmp=lambda x,y : cmp(x,y), 
            key=lambda x: os.path.size( os.path.join( dest, x)),  reverse = True)[0]
    
    # Rename that biggest file to swale.dat
    shutil.move( os.path.join(dest,biggest), os.path.join(dest,"swale.date") )
    
    # Run the command 
    os.system( command ) 
    # Only use os.system if you know your command is completely secure and you don't need the output. Use the popen module if you need more security and need the output.
    

    Note : None of this is tested - but it should work