如何配置cron定时任务将S3指定文件夹按目录结构移动到EC2对应目录
实现S3指定目录定时同步到EC2的方案
问题原因
你原先使用的全局递归移动命令会同步S3存储桶根目录下的所有内容,若桶内新增其他非目标目录也会被同步到EC2,不符合仅同步folder1/folder2/folder3三个目录的需求。
实现方案
方案1:直接在cron中配置多命令
分别对三个目标目录执行移动操作,保证仅处理指定目录,结构完全对应:
*/5 * * * * /usr/bin/aws s3 mv s3://bucket/folder1/ /绝对路径/main/folder1/ --recursive && /usr/bin/aws s3 mv s3://bucket/folder2/ /绝对路径/main/folder2/ --recursive && /usr/bin/aws s3 mv s3://bucket/folder3/ /绝对路径/main/folder3/ --recursive
注意事项:
- 请将
/绝对路径/main/替换为EC2上main目录的实际绝对路径,可在main目录下执行pwd获取 aws命令的路径可通过EC2上执行which aws获取,替换为实际路径避免cron环境变量缺失找不到命令- 若不需要删除S3上的源文件,仅做增量同步,可将命令中的
mv替换为sync
方案2:使用shell脚本封装(更易维护)
如果后续可能调整同步目录,建议封装为独立shell脚本,步骤如下:
- 新建
sync_s3.sh脚本,内容如下:
#!/bin/bash # 配置变量 S3_BUCKET="s3://bucket" LOCAL_ROOT="/替换为实际的main目录绝对路径" AWS_PATH="$(which aws)" # 遍历同步目标目录 for target_dir in folder1 folder2 folder3 do ${AWS_PATH} s3 mv "${S3_BUCKET}/${target_dir}/" "${LOCAL_ROOT}/${target_dir}/" --recursive done
- 给脚本添加执行权限:
chmod +x /path/to/sync_s3.sh
- 配置cron定时执行脚本:
*/5 * * * * /path/to/sync_s3.sh
内容的提问来源于stack exchange,提问作者rfcr
相关产品推荐
相关产品推荐

