Python中是否有等效Linux cp -u的更新复制文件现成工具?
Python实现类
cp -u更新复制功能的解决方案 标准库现成方案(Python 3.9及更早版本)
直接使用标准库distutils模块的copy_file接口即可,无需自行实现时间戳对比逻辑:
- 调用时将update参数设为True,就完全匹配你描述的更新复制规则:仅当源文件更新、或目标文件不存在时执行复制,等价于Linux下的
cp -u命令 - 示例代码:
from distutils.file_util import copy_file # 单文件更新复制 copy_file("/path/to/source.file", "/path/to/dest.file", update=True) # 如果需要批量更新复制整个目录,可以用同模块下的copy_tree from distutils.dir_util import copy_tree copy_tree("/path/to/source_dir", "/path/to/dest_dir", update=True)
Python 3.10+ 兼容方案
因为distutils模块在Python 3.10版本被标记为弃用,3.12版本正式从标准库移除,你可以用pathlib + shutil组合实现相同逻辑,代码非常简洁:
from pathlib import Path import shutil def update_copy(src: str | Path, dst: str | Path) -> bool: src_p = Path(src) dst_p = Path(dst) # 目标不存在 或 源文件修改时间晚于目标时执行复制 if not dst_p.exists() or src_p.stat().st_mtime > dst_p.stat().st_mtime: # 使用copy2保留文件元数据,和系统cp命令默认行为一致 shutil.copy2(src_p, dst_p) return True return False
内容的提问来源于stack exchange,提问作者S.V
相关产品推荐
相关产品推荐

