Errno 2 using python shutil.py No such file or directory for file destination

Question:

I am using the shutil python module to copy files and directories on a linux redhat machine.

I wrote the following method, which takes in 2 params: src (the path of the file or dir that is being collected) and destination (the desired new path of where the collected log/dir is being pasted to).

def copy(src, destination):
    if(os.path.exists(src)):
        if(os.path.isdir(src)):
            if(os.path.exists(destination)):
                shutil.copytree(src, destination+getTimeStamp())
            else:
                shutil.copytree(src, destination)
        else:
            shutil.copy(src, destination)
    else:
        print src+" not found"

I have been using this method just fine, but I recently ran into an error when running this code:

copy("/home/midgar/logs/logger.xml", currentPath+"/testrun/logs/logger.xml")

The error: IOError: [Errno 2] No such file or directory: ‘collectedLogs/testrun/logs/logger.xml’

I would understand what this error implies if the file or directory that it is looking for is the src, but this is the destination that is causing the error. I found out that this line of code that throws the error goes to the line: “shutil.copy(src, destination)” in my copy method.

So far, my copy method just overwrites existing files, and if there is an existing directory, it creates a new one with a time stamp. In this case, the destination file does not already exist anyways. So, what can be the issue? Why am I getting this error with the DESTINATION path (when I would typically expect to see this kind of error with the SRC path).

Could it possibly be because this is an .xml file?

Asked By: OMGitzMidgar

||

Answers:

When I get this error it usually means that one of the folders doesn’t exist.

I wrote a simple script to to test this out. In the script below the backup folder does exist but the today folder does not. When I run the script I get the same error as you.

IOError: [Errno 2] No such file or directory: ‘backup/today/my_file.txt’

import shutil
shutil.copy("my_file.txt", "backup/today/my_file.txt")

If all of your folders do exist I would check to make sure the permissions on them have not changed.

Answered By: Eric Bulloch

By default, shutil.copytree() follows (resolves) symbolic links. If the symlink is broken, it raises a No such file or directory exception. One workaround is to specify that symlinks should be copied unresolved by passing symlinks=True.

Answered By: Roger Dahl

I also recently came across this error. In my case, the file wouldn’t be created because the filename and directory structure exceeded the max 260 characters. Solution: choose a shorter filename (or full file path name).

Answered By: MattMitchell
Categories: questions Tags: , , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.