CentOS下自动备份WordPress的Shell脚本 v1.2 (分卷、发送到smtp邮箱)
另有一版://blog.upall.cn/788.html,下边代码这版对上一版稍有修改,除了不值一提的改动,有一项与之不同:增加了分卷功能,用于解决大包发不到邮箱的问题,每个卷单独发送。效果出下:
blog.upall.cn.list
*
blog.upall.cn.Ex.list
.ttc .mp3
wpBak.sh
##################################### # 说明:WP备份脚本 # # 要求:安装7zip # # 作者:upall,//blog.upall.cn/ # ##################################### #!/bin/bash # 配置 FILE_LIST="/web/sh/blog.upall.cn.list" # 需要备份的文件清单 FILE_LIST_EX="/web/sh/blog.upall.cn.Ex.list" # 清单中排除不备的文件 MAIL_TO="user@upall.cn" # 收件人 DIR_WP="/web/blog.upall.cn" # WP根目录 DB_NAME="blog_upall_cn" # DB名称 DB_HOST="localhost" # mysql服务器地址 DB_PORT="3306" # DB端口号 DB_USER="blog.upallcn" # DB用户名 DB_PWD="pblog.upallcn" # DB密码 DIR_TEMP="/var/tmp" # 存放待发送文件的临时目录(需要为空) MAIL_CLIENT="/usr/local/bin/mutt" # 邮件客户端的名称,可不写路径 MAIL_TITLE="[blog.upall.cn]" # 邮件标题 FILE_PWD="blog.upall.cn" # 压缩包密码 FILE_VOLUME="30m" # 分卷大小 30M,可用单位:b、k、m、g DIR_CUR=$PWD # 记录当前目录,SHELL需要切换目录 DATE=`date +%Y%m%d%H%M%S` MSG_CONTENT="" # 备份进度标志(保持空值不要改动!) # 创建临时目录 if [ -z "$MSG_CONTENT" ]; then if [ ! -d $DIR_TEMP ]; then mkdir -p "$TEMP_DIR" if (( $? != 0 )); then MSG_CONTENT='CAN NOT MKDIR TEMP'; fi fi fi # 测试WP目录 if [ -z "$MSG_CONTENT" ]; then if [ ! -d $DIR_WP ]; then MSG_CONTENT='WP FOLDER NOT FOUND'; fi fi # 检测待备份文件列表是否存在 if [ -z "$MSG_CONTENT" ]; then if [ ! -e $FILE_LIST ]; then MSG_CONTENT='LIST FILE NOT FOUND'; fi fi # 检测数据库帐号 if [ -z "$MSG_CONTENT" ]; then /usr/bin/mysqlshow -u $DB_USER --password=$DB_PWD if (( $? != 0 )); then MSG_CONTENT='Denied access to the database'; fi fi # 备份数据库 if [ -z "$MSG_CONTENT" ]; then mysqldump -h$DB_HOST -P$DB_PORT -u$DB_USER -p$DB_PWD $DB_NAME > $DIR_WP/DB$DATE.sql if (( $? != 0 )); then MSG_CONTENT='DUMP ERROR'; fi fi # 备份WP文件 if [ -z "$MSG_CONTENT" ]; then cd $DIR_WP #7za a -p$FILE_PWD -xr@$FILE_LIST_EX $DIR_TEMP/BLOG.UPALL.CN$DATE.7z @$FILE_LIST /usr/local/bin/7za a -v$FILE_VOLUME -p$FILE_PWD -xr@$FILE_LIST_EX $DIR_TEMP/BLOG.UPALL.CN$DATE.7z @$FILE_LIST if (( $? != 0 )); then MSG_CONTENT='COMPRESS ERROR'; fi fi # 发送邮件 if [ -z "$MSG_CONTENT" ]; then MSG_CONTENT='备份成功'; if [ -z "$FILE_PWD" ]; then MSG_CONTENT=$MSG_CONTENT""; else MSG_CONTENT=$MSG_CONTENT",压缩包已加密"; fi MSG_CONTENT=$MSG_CONTENT"<br />此SQL可更换域名:UPDATE \`blog_posts\` SET \`post_content\` = REPLACE(\`post_content\`,'//blog.upall.cn','http://newDomainName') WHERE \`post_content\` LIKE '%//blog.upall.cn%';"; #将分卷的文件逐个发送(e参数指定的HTML格式需要mutt1.5+) INDEX=1 TOTAL=`ls -l $DIR_TEMP BLOG.UPALL.CN*.7z* | grep "^-" | wc -l` for FILE in `ls -a $DIR_TEMP $DIR_TEMP BLOG.UPALL.CN*.7z*` do if [ -f "$DIR_TEMP/$FILE" ];then echo $MSG_CONTENT | $MAIL_CLIENT $MAIL_TO -s "[SUCCESS]$MAIL_TITLE - $INDEX/$TOTAL - $DATE" -a $DIR_TEMP/$FILE -e "set content_type=text/html\; charset=UTF-8" INDEX=$(($INDEX+1)) fi done else echo $MSG_CONTENT | $MAIL_CLIENT \ -e 'set content_type="text/html; charset=UTF-8"' -s "[ERROR]$MAIL_TITLE - $DATE"\ $MAIL_TO fi # 清理退出 rm -f $DIR_WP/DB$DATE.sql rm -f $DIR_TEMP/BLOG.UPALL.CN$DATE.7z* cd $DIR_CUR if [ -z "$MSG_CONTENT" ]; then exit 0 else echo "$MSG_CONTENT" exit 1 fi
for 部分代码的 win 版可以参考以下代码:
@echo off setlocal EnableDelayedExpansion set dir=C:\upall :: 统计个数 for /f "delims=:" %%i in ('dir %dir% /a:-d /s /b ^| findstr /n .*') do (set fileSize=%%i) set total=!fileSize! :: 挨个处理 set index=1 for /f %%f in ('dir %dir% /a:-d /s /b') do ( echo 第 !index!/%total% 个:%%f set /a index+=1 ) endlocal