我有一段bash脚本如下,将远程机器上的数据库下载到本地进行使用:
#!/bin/bash
sftp user@11x.1xx.1x.2xx<<EOF
get /var/www/app/db/app.db /home/user/db_bak/
quit
EOF
mv /home/user/db_bak/app.db /var/www/app/db/
echo "done"
问题是文件下载完成,但是mv /home/user/db.bak/app.db /var/www/app/db/和echo "done"并未执行,这是为什么呢?刚接触,goole了半天也没有结果,求大神指点。
SFTP保存到本地的路径: /home/user/db_bak/
你给 mv 程序的本地文件路径: /home/user/db.bak/
比较一下上面两个路径有有什么不同。给 mv 不正确的本地路径它当然不会给你移动。
我没有在shell脚本中使用过sftp,不知道sftp执行完是不是也给了shell结束的信号导致下方的命令不再执行。
个人一点建议:为什么不使用相对更安全和稳定的ssh(scp)呢?你没有服务器的权限?如果有权限还是建议使用scp吧。这样你就可以少写几行命令
version 1:
#/usr/bin/env bash
scp user@ip:/file/path /home/user/local/path
mv /old/path/file /new/path/file
echo "Done!"
version 2: 加上判断,更准确一些
#/usr/bin/env bash
scp user@ip:/file/path /home/user/local/path
# 如果你从服务器复制到本地的是目录,就把下面中括号的 -f 改成 -d
if [ -f "/local/path/file" ]; then
mv /local/path/file /new/path/file
else
echo "文件不存在!"
fi
if [ -f "/new/path/file" ]; then
echo "Done!"
else
echo "目标目录文件不存在"
fi
version 3: 被你带跑偏了,为什么不能直接scp到最终的目录呢。唉...
#/usr/bin/env bash
echo "第一步:开始复制远程文件到本地"
scp user@ip:/var/www/app/db/app.db /home/user/db_bak/
if [ -f "/home/user/db_bak/app.db" ]; then
echo "文件成功从服务器复制到本地!"
else
echo "备份失败"
fi
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。