SFTP传输自动化脚本优化咨询:是否应将文件名转为变量
SFTP传输自动化脚本优化咨询:是否应将文件名转为变量
当然应该把文件名转成变量啊!这绝对是让你的bash脚本更健壮、更易维护的核心操作,完全贴合你自动化的需求。
为什么这么说?给你列几个关键好处:
- 彻底避免重复编写日期字符串和文件名,大幅降低拼写错误的概率
- 后续如果要调整命名规则(比如改日期格式、加前缀后缀),只需要修改变量定义的地方,不用在脚本里到处找替换
- 让脚本逻辑更清晰,不管是你自己后期维护,还是别人看你的脚本,一眼就能识别出关键的备份文件
给你一个具体的脚本示例,完全按照你的需求优化:
#!/bin/bash # 定义日期变量,统一命名后缀(格式可按需调整,比如%Y-%m-%d) TODAY=$(date +%Y%m%d) # 定义备份文件相关变量 BACKUP_DIR="./backup_${TODAY}" DB_BACKUP_FILE="db_dump_${TODAY}.sql" DB_TGZ_FILE="db_backup_${TODAY}.tgz" DIR_TGZ_FILE="tree_backup_${TODAY}.tgz" # 1. 创建今日备份目录 mkdir -p "${BACKUP_DIR}" # 2. 导出数据库并打包成tgz mysqldump -u your_db_user -p'your_db_pass' your_target_db > "${BACKUP_DIR}/${DB_BACKUP_FILE}" tar czf "${BACKUP_DIR}/${DB_TGZ_FILE}" -C "${BACKUP_DIR}" "${DB_BACKUP_FILE}" # 3. 打包目标目录树 tar czf "${BACKUP_DIR}/${DIR_TGZ_FILE}" /path/to/your/target/tree # 4. SFTP批量上传(用Here Document实现非交互式操作,直接引用变量) sftp your_ftp_user@windows_ftp_server << EOF cd /path/to/remote/target/dir put "${BACKUP_DIR}/${DB_TGZ_FILE}" put "${BACKUP_DIR}/${DIR_TGZ_FILE}" exit EOF # 输出上传状态 if [ $? -eq 0 ]; then echo "✅ 所有备份文件上传成功!" else echo "❌ 上传过程出现错误,请检查连接或文件路径!" fi
额外给你几个实用建议:
- 这里用了
<< EOF的Here Document写法,能把SFTP的命令批量传入,完全避免交互式操作,非常适合自动化场景 - 日期格式
%Y%m%d生成的是类似20240520的格式,如果你习惯带分隔符,改成date +%Y-%m-%d就行,记得所有用到日期的变量要保持一致 - 脚本里的数据库密码如果明文写不安全,可以改用SSH密钥认证(如果是MySQL的话,也可以配置
.my.cnf文件免密登录) - 可以给脚本加一些错误判断,比如检查
mysqldump是否成功、目录是否创建成功,避免后续步骤在前置操作失败的情况下继续执行
备注:内容来源于stack exchange,提问作者Bokkie
相关产品推荐
相关产品推荐

