pythonにおけるファイル操作は、基本 shutil を使えば良いが、細かな挙動は把握しておく必要がある。
どちらもファイルをコピーするコマンドだが、
copyはメタデータをコピーしない。つまり、コピー先ファイルの更新日時等はコピー時のものになるcopy2はそれらを元ファイルと同じにするshutil.copy(src, dst, *, follow_symlinks=True) shutil.copy2(src, dst, *, follow_symlinks=True)
shutil.move(src, dst, copy_function=copy2)
src, dstがディレクトリ同士でも、dstの中にsrcが入れられる点に注意。
update=1 を引数に加えると「最終更新日時がsrcと同じか新しい場合」は上書きしないaaa\ aaa\
|-bbb.txt |-bbb.txt
`-ccc.txt(1) copy_tree('ddd', 'aaa') |-ccc.txt(2)
ddd\ ----------------------> `-eee.txt
|-ccc.txt(2) ddd\
`-eee.txt |-ccc.txt(2)
`-eee.txt
※ccc.txt は区別するため(1)(2)を付けているが、実際のファイル名には無いとする
「ディレクトリを移動したいが、dstが存在したら統合したい」場合は、ひとまずcopy_tree後、srcを消せばいい。が、同一ドライブの場合、移動とコピーでは速度に差が出るため、もっと良い方法が無いだろうか。