私は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ファイルである可能性がありますか?
このエラーが発生した場合は、通常、フォルダの1つが存在しないことを意味します。
これをテストするための簡単なスクリプトを作成しました。以下のスクリプトでは、バックアップフォルダーは存在しますが、todayフォルダーは存在しません。スクリプトを実行すると、あなたと同じエラーが発生します。
IOError:[Errno 2]そのようなファイルまたはディレクトリはありません: 'backup/today/my_file.txt'
import shutil
shutil.copy("my_file.txt", "backup/today/my_file.txt")
すべてのフォルダーが存在する場合は、それらのアクセス許可が変更されていないことを確認します。
デフォルトでは、shutil.copytree()
はシンボリックリンクをたどります(解決します)。シンボリックリンクが壊れていると、No such file or directory
例外が発生します。回避策の1つは、symlinks=True
を渡して、シンボリックリンクを未解決でコピーするように指定することです。