请求创建Unix环境下每日执行的SFTP远程到本地批量复制脚本
每日批量同步远程SFTP文件到本地的Unix脚本
没问题,结合你给出的手动操作步骤和需求,我帮你写一个可以每日自动执行的批量同步脚本,兼顾灵活性和可维护性:
完整脚本代码
#!/bin/bash # -------------------------- 配置变量 - 请根据实际情况修改 -------------------------- USERID="pABCDWPPP" # 远程SFTP用户名 REMOTE_HOST="170.20.100.10" # 远程服务器IP REMOTE_PORT="10000" # SFTP端口 MAILBOXPATH="/SRC_path" # 远程源文件路径 LOCAL_TGT_PATH="/data/TGT_path" # 本地目标路径 FILE_PATTERN="test-*.csv" # 要同步的文件匹配规则(按需调整,比如按日期的话可以用test-$(date +%Y%m%d)-*.csv) LOG_FILE="/var/log/sftp_sync.log" # 日志文件路径,便于排查问题 # --------------------------------------------------------------------------------- # 检查本地目标路径是否存在,不存在则创建 if [ ! -d "${LOCAL_TGT_PATH}" ]; then mkdir -p "${LOCAL_TGT_PATH}" echo "$(date '+%Y-%m-%d %H:%M:%S') - 本地目标路径不存在,已创建: ${LOCAL_TGT_PATH}" >> "${LOG_FILE}" fi # 切换到本地目标路径 cd "${LOCAL_TGT_PATH}" || { echo "$(date '+%Y-%m-%d %H:%M:%S') - 无法切换到本地目标路径: ${LOCAL_TGT_PATH}" >> "${LOG_FILE}" exit 1 } # 执行SFTP批量下载操作 echo "$(date '+%Y-%m-%d %H:%M:%S') - 开始同步远程文件..." >> "${LOG_FILE}" sftp -oPort="${REMOTE_PORT}" "${USERID}@${REMOTE_HOST}:${MAILBOXPATH}" << EOF mget ${FILE_PATTERN} bye EOF # 检查同步是否成功 if [ $? -eq 0 ]; then echo "$(date '+%Y-%m-%d %H:%M:%S') - 文件同步完成" >> "${LOG_FILE}" else echo "$(date '+%Y-%m-%d %H:%M:%S') - 文件同步失败,请检查SFTP连接或路径配置" >> "${LOG_FILE}" fi
关键说明
- 变量配置区:所有需要自定义的参数都集中在脚本开头,你可以根据实际情况修改。比如如果需要每日同步当天的文件,可以把
FILE_PATTERN改成test-$(date +%Y%m%d)-*.csv,这样只会下载当天生成的文件。 - 日志记录:脚本会把执行状态写入指定的日志文件,方便后续排查同步失败的问题。
- 路径检查:脚本会自动检查本地目标路径是否存在,不存在则自动创建,避免因路径缺失导致同步失败。
使用步骤
- 保存脚本:把上面的代码保存为
sftp_sync.sh,比如放在/usr/local/bin/目录下。 - 添加执行权限:执行命令赋予脚本可执行权限:
chmod +x /usr/local/bin/sftp_sync.sh - 测试运行:手动执行脚本,验证是否能正常同步文件:
/usr/local/bin/sftp_sync.sh - 配置定时任务:使用
crontab设置每日自动执行,比如每天凌晨2点执行:
执行crontab -e,添加以下内容:
保存退出后,定时任务就会生效。0 2 * * * /usr/local/bin/sftp_sync.sh
重要注意事项
- 免密登录配置:为了避免脚本执行时需要输入密码,建议配置SSH密钥登录:在本地服务器生成密钥对(
ssh-keygen),然后把公钥上传到远程服务器的~/.ssh/authorized_keys文件中。 - 权限问题:确保执行脚本的用户(比如你测试用的
infa用户)对本地目标路径有读写权限,同时远程SFTP用户对源路径有读取权限。 - 文件覆盖问题:如果本地已经存在同名文件,
mget会默认覆盖,如果你需要避免覆盖,可以在SFTP交互命令中添加-n参数,改成mget -n ${FILE_PATTERN},这样只会下载本地没有的文件。
内容的提问来源于stack exchange,提问作者goldenbutter
相关产品推荐
相关产品推荐

