web-dev-qa-db-ja.com

Errno 2 using python shutil.pyファイルの宛先にそのようなファイルまたはディレクトリはありません

私はshutil pythonモジュールを使用して、LinuxRedHatマシン上のファイルとディレクトリをコピーしています。

次のメソッドを作成しました。このメソッドは、src(収集されるファイルまたはディレクトリのパス)とdestination(収集されたログ/ディレクトリが貼り付けられる場所の新しいパス)の2つのパラメーターを取ります。

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"

私はこのメソッドを問題なく使用してきましたが、最近、このコードを実行するときにエラーが発生しました。

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

エラー:IOError:[Errno 2]そのようなファイルまたはディレクトリはありません: 'collectedLogs/testrun/logs/logger.xml'

探しているファイルまたはディレクトリがsrcである場合、このエラーが何を意味するかは理解できますが、これがエラーの原因となっている宛先です。エラーをスローするこのコード行は、コピーメソッドの「shutil.copy(src、destination)」の行にあることがわかりました。

これまでのところ、私のコピー方法は既存のファイルを上書きするだけで、既存のディレクトリがある場合は、タイムスタンプ付きの新しいディレクトリを作成します。この場合、宛先ファイルはまだ存在していません。それで、何が問題になる可能性がありますか? DESTINATIONパスでこのエラーが発生するのはなぜですか(通常、SRCパスでこの種のエラーが発生すると予想される場合)。

これは.xmlファイルである可能性がありますか?

6
OMGitzMidgar

このエラーが発生した場合は、通常、フォルダの1つが存在しないことを意味します。

これをテストするための簡単なスクリプトを作成しました。以下のスクリプトでは、バックアップフォルダーは存在しますが、todayフォルダーは存在しません。スクリプトを実行すると、あなたと同じエラーが発生します。

IOError:[Errno 2]そのようなファイルまたはディレクトリはありません: 'backup/today/my_file.txt'

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

すべてのフォルダーが存在する場合は、それらのアクセス許可が変更されていないことを確認します。

5
Eric Bulloch

デフォルトでは、shutil.copytree()はシンボリックリンクをたどります(解決します)。シンボリックリンクが壊れていると、No such file or directory例外が発生します。回避策の1つは、symlinks=Trueを渡して、シンボリックリンクを未解決でコピーするように指定することです。

2
Roger Dahl