SFTP下载文件按名称分类移动到S3桶自定义路径问题求助
脚本问题分析及修改方案
你现有脚本的核心问题是aws s3 cp的过滤规则没有和当前循环的目标前缀绑定,两次循环分别往FOO和BAR路径传文件时,都只筛选了所有.csv后缀的文件,没有额外限定文件名开头,所以所有csv都会被同时传到两个路径里。另外脚本中还存在未定义变量LOCAL_PREFIX的问题,该变量在现有逻辑中没有用到,可以直接删除。
修改建议
原有SFTP下载逻辑无需调整,核心修改S3上传部分的逻辑,给每个循环的--include规则加上对应前缀匹配即可。
修改后的完整脚本
#!/usr/bin/env bash SFTP="sftp user@sftpserver" FOLDER="/data" TARGET="/home/completed" DEST="FOO BAR" S3_PREFIX="s3://bucket_name/test/" # 拉取SFTP文件列表 FILES=`$SFTP <<EOF cd $FOLDER ls EOF` FILES=`echo $FILES|sed "s/.*sftp> ls//"` # 批量下载文件到本地目录 ( echo cd $FOLDER for F in $FILES; do echo get $F $TARGET done ) | $SFTP # 按前缀分类上传到S3 for dest in $DEST; do aws s3 cp $TARGET $S3_PREFIX/$dest --recursive --exclude "*" --include "${dest}_*.csv" done
说明
修改后循环里的--include "${dest}_*.csv"会精准匹配对应前缀的csv文件:循环到FOO时只会匹配FOO_开头的csv,循环到BAR时只会匹配BAR_开头的csv,不会出现重复上传的问题。如果后续需要新增其他前缀的分类,只需要在DEST变量里追加对应的前缀字符串即可,不需要修改其他逻辑。
内容的提问来源于stack exchange,提问作者CMR H
相关产品推荐
相关产品推荐

