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を消せばいい。が、同一ドライブの場合、移動とコピーでは速度に差が出るため、もっと良い方法が無いだろうか。