自动备份 linux shell
这是我之前写的一个 shell 脚本,用于 linux/unix 系统间的文件自动备份。
脚本的主要功能有:
使用要求:
系统 expect 命令可用;目标(远程)设备文件夹存在且可有相应权限。适用情况 (以下场景测试正常): 一台设备同一文件夹向一台或多台远程设备相同或不同文件夹拷贝文件 一台设备不同文件夹向一台或多台远程设备相同或不同文件夹拷贝文件 AIX 系统间文件非实时同步 AIX 和 RHEL 系统间文件非实时同步 RHEL 系统间文件非实时同步
使用前请先进行测试。
aix_trans.sh 脚本代码如下:
- #!/bin/bash
- #Author:ZJ
- #QQ:1037509307
- #DateTime: 2016-07-09 01:41:14
- #Description:
- #用于不同服务器间当天的文件的同步或拷贝;需要expect命令支持,RHEL和AIX测试正常,需要expect命令支持。
- #aix系统需要修改头文件;
- #使用要求:系统expect命令可用;目标(远程)设备文件夹存在且可访问。
- #适用情况:
- #一台设备同一文件夹向一台或多台远程设备相同或不同文件夹拷贝文件
- #一台设备不同文件夹向一台或多台远程设备相同或不同文件夹拷贝文件
- #Version: v1.3
- ########################################源设备信息##########################################
- #源设备文件路径1 (路径最后不要加斜线/)
- Source_Path_1=/usr/appsoft/EasyCfg/system_check/warnlog
- #源设备文件压缩包名称1
- File_Name_1=file1.zip
- #若需要同步该设备的其他文件夹,请按照上述格式继续添加变量即可,示例
- #源设备文件路径2
- #Source_Path_2=xxxx
- #源设备文件压缩包名称2
- #File_Name_2=file2.zip
- ###################################第一台目标设备信息#######################################
- #目标设备IP地址
- Target_IP_A=192.168.101.206
- #目标设备密码[email protected]#目标设备文件存放路径(请确保该文件夹存在且可被访问)
- Target_Path_A1=/usr/appsoft/jieya
- #若需要将文件同步到该设备的不同文件夹下,请继续添加文件存放路径即可变量即可,示例
- #Target_Path_A2=/usr/appsoft/jieya1
- #Target_Path_A3=/usr/appsoft/jieya2
- #若需要添加其他目标设备,请按照"第一台目标设备信息"进行添加,示例:
- ###################################第二台目标设备信息#######################################
- #目标设备IP地址
- #Target_IP_B=192.168.101.206
- #目标设备密码[email protected]#目标设备文件存放路径(请确保该文件夹存在且可被访问)
- #Target_Path_B1=/usr/appsoft/jieya
- ############################################################################################
- Get_Syslog(){
- LANG=EN
- Month=`date +%b`
- Day=`date +%e`
- Ip=$1
- PASSWD=$2
- Source_Path=$3
- Target_Path=$4
- File_Name=$5
- cd "${Source_Path}"
- ls -l | egrep "${Month}[[:space:]]+${Day}" | awk '{print $9}' | xargs zip -r ${File_Name}
- expect -c "
- set timeout -1
- spawn scp -r -p ${Source_Path}/${File_Name} root@${Ip}:${Target_Path}
- expect {
- \"*yes/no)?\" {send \"yes\r\";exp_continue}
- \"*password:\" {send \"${PASSWD}\r\";exp_continue}
- \"*unreachable\" {exit 1}
- \"*Permission denied*\" {exit 2}
- \"*No route to host*\" {exit 3}
- \"*failure*\" {exit 4}
- \"*No such file or directory*\" {exit 5}
- \"*No match*\" {exit 6}
- \"*failed*\" {exit 7}
- expect eof
- }
- spawn ssh root@${Ip} cd $Target_Path && unzip -o $File_Name -d $Target_Path && rm -rf $Target_Path/$File_Name
- expect {
- \"*yes/no)?\" {send \"yes\r\";exp_continue}
- \"*password:\" {send \"${PASSWD}\r\";exp_continue}
- \"*unreachable\" {exit 1}
- \"*Permission denied*\" {exit 2}
- \"*No route to host*\" {exit 3}
- \"*failure*\" {exit 4}
- \"*No such file or directory*\" {exit 5}
- \"*No match*\" {exit 6}
- \"*failed*\" {exit 7}
- expect eof
- }"
- } #Get_Syslog右括号
- #Tips:
- #Get_Syslog "目标主机IP" "目标主机密码" "源主机文件路径" "目标主机文件路径" "压缩包名称"
- #如果需要传送多个文件夹的文件,按照下面的命令格式依次添加即可
- Get_Syslog "${Target_IP_A}" "${Target_Passwd_A}" "${Source_Path_1}" "${Target_Path_A1}" "${File_Name_1}"
- #示例
- #Get_Syslog "$Target_IP_A" "$Target_Passwd_A" "$web_Path_From_2" "$Target_Path_A1" "$File_Name_2"
来源: http://www.bubuko.com/infodetail-2077482.html