我有一个非常对 shell 脚本的经验有限,想制定某种脚本来每周备份我的博客 (Wordpress)。
这是我目前所拥有的
#!/bin/bash
# Determine current date
setenv CURDATE date +%Y%m%d
# Backup DB & email it to me
mysqldump dbname -u user -ppassword | gzip | uuencode ${CURDATE}dbname.sql.gz | mail -s "backup for dbname ${CURDATE}" [email protected]
cd /home/myhome
# Zip blog
tar cf - blog.mysite.me | gzip - > ~/backups/${CURDATE}blog.mysite.me.tar.gz
这就是我有点困惑的地方...我原本想通过电子邮件将博客目录发送给我自己,但是当目录大小超过 10MB 左右时该怎么办?我该如何编写脚本来拆分目录并通过电子邮件将目录块发送给我?
我还有一个更好的建议,那就是将备份通过 FTP 传输到我拥有的另一个 VPS。但为了节省空间,我只想保留最后 10 个备份。我将如何实现脚本的以下部分:
- 上传备份
- 获取文件列表
- 获取当前目录中的文件数(例如 /home/myhome/backups/blog )
- 如果数量 > 10,删除最旧的
如能得到任何关于解决该问题的帮助/建议或指点,我们将不胜感激:)
答案1
不要将其压缩并进行 ftping,而是通过网络使用 rsync。如果您为每个日期创建一个新目录,并使用 --link-dest 选项将其链接回上一个目录,它将仅存储已更改的文件,而未更改的文件将硬链接到上一个目录。
我发布了一些代码您使用哪种 Linux 服务器备份解决方案
答案2
首先,要通过命令设置变量,请使用
CURDATE=$(date +%Y%m%d)
代替
setenv CURDATE date +%Y%m%d
如果您只想保留 10 天的备份,您可以删除 10 天前的备份。使用date
相关命令找到它并保存到另一个变量:
PAST_DATE=$(date +"%m-%d-%Y" --date="10 days ago")
其次,您可以使用lftp
在一行上执行 ftp 命令,如下所示:
lftp -u user,pass server -e "mrm *${PAST_DATE}.sql.gz; exit;
如果您在文件名中使用日期,并且每天删除 10 天前的文件,您就可以实现您想要的效果。您lftp
也可以使用它来放置文件,它的工作方式与常规客户端相同,只是它在一行上工作。