我试图创建一个 bash 脚本来通过 FTP 将 Raspberry Pi 的备份运行到我的 Box 帐户。它的大部分工作,但由于某种原因它不会将变量转换为它们代表的文本。当我运行这个脚本时:
#!/bin/bash
FILENAME=backup-$(date +%Y-%m-%d).tar.gz
tar -czvf /tmp/$FILENAME /home/pi/
lftp -c 'open -e "set ftps:initial-prot ""; \
set ftp:ssl-force true; \
set ftp:ssl-protect-data true; \
put /tmp/$FILENAME; " \
-u "USERNAME", "PASSWORD" \
ftps://ftp.box.com:990/Automation/RPI/Backups
它创建存档并正常连接到服务器,但它给了我这个错误:
put: /tmp/$FILENAME: No such file or directory
我尝试用“backup-$(date +%Y-%m-%d).tar.gz”替换 $FILENAME,但仍然返回
put: /home/pi/+%Y-%m-%d).tar.gz: No such file or directory
并使用“backup*.tar.gz”返回类似的结果。只有当我使用特定的文件名代替任何变量或通配符时,我才能让它工作,但这对我不起作用,因为我想设置一个 cron 作业来自动备份。
那么,有人知道如何解决这个问题,或者有更好的选择吗?谢谢!
答案1
如果有人有同样的问题,这是我最后得到的脚本:
#!/bin/bash
FILENAME="backup-$(date +%Y-%m-%d).tar.gz"
echo $FILENAME
tar -czvf /tmp/$FILENAME /home/pi/
lftp << EOF
set ftps:initial-prot
set ftp:ssl-force true
set ftp:ssl-protect-data true
open -u "USERNAME","PASSWORD" ftps://ftp.box.com:990/Automation/RPI/Backups
put /tmp/$FILENAME
bye
EOF
rm /tmp/$FILENAME
答案2
你在问两个不同的问题。按相反顺序:
更好的选择可能是
rsync
.它与 FTP 一样简单,但更智能。我强烈推荐它。您的变量未解析,因为您将它们用单引号封装。观察:
$ foo=bar $ echo $foo bar $ echo '$foo' $foo $ echo "$foo" bar
如果您重新编写命令,将其用双引号括起来,那么事情就应该开始工作了。