如何使用字典将文件从一个文件夹复制到多个目标文件夹
使用字典批量复制文件到目标文件夹的方法
当然可以,以下是两种常用的实现方式,覆盖Python和Shell脚本场景:
Python 实现
利用标准库shutil和os即可完成,逻辑清晰且跨平台:
import shutil import os # 替换成你的文件路径字典 file_mapping = { "/path/to/source/file1.txt": "/path/to/target/folder1", "/path/to/source/file2.png": "/path/to/target/folder2" } for src_file, dest_dir in file_mapping.items(): # 确保目标文件夹存在,不存在则递归创建 os.makedirs(dest_dir, exist_ok=True) # 拼接目标文件完整路径(保留原文件名) dest_file = os.path.join(dest_dir, os.path.basename(src_file)) # 复制文件并保留元数据(如创建时间、权限) shutil.copy2(src_file, dest_file)
关键说明
shutil.copy2相比shutil.copy会保留文件元数据,更适合备份场景os.makedirs的exist_ok=True参数避免因文件夹已存在抛出异常- 可额外添加
if os.path.exists(src_file):判断,跳过不存在的源文件
Bash Shell 脚本实现
适用于Linux/macOS环境,利用bash关联数组实现:
#!/bin/bash # 定义文件路径映射的关联数组 declare -A file_mapping=( ["/path/to/source/file1.txt"]="/path/to/target/folder1" ["/path/to/source/file2.png"]="/path/to/target/folder2" ) for src_file in "${!file_mapping[@]}"; do dest_dir="${file_mapping[$src_file]}" # 递归创建目标文件夹,忽略已存在的目录 mkdir -p "$dest_dir" # 复制文件并保留属性 cp -p "$src_file" "$dest_dir/" done
关键说明
declare -A用于定义bash关联数组,需要bash 4.0及以上版本支持mkdir -p确保层级目录全部创建cp -p保留文件的权限、时间戳等属性
通用注意事项
- 确保对源文件有读取权限,对目标文件夹有写入权限
- 若源文件不存在,两种实现都会抛出错误,可自行添加存在性判断跳过
- 大文件复制时,Python可考虑
shutil.copyfileobj分块处理,Shell可使用rsync提升效率
内容的提问来源于stack exchange,提问作者Views From The Chris
相关产品推荐
相关产品推荐

