Shell脚本:使用rsync备份文件/目录

本文我们介绍一个shell脚本,用来使用rsync命令将你本地Linux机器上的文件/目录备份到远程Linux服务器上。使用该脚本会以交互的方式实施备份,你需要提供远程备份服务器的主机名/ip地址和文件夹位置。我们使用一个单独的列表文件,在这个文件中你需要列出要备份的文件/目录。我们添加了两个脚本,第一个脚本在每次拷贝完一个文件后询问密码(如果你启用了ssh密钥验证,那么就不会询问密码),而第二个脚本中,则只会提示一次输入密码。

我们打算备份bckup.txt,dataconfig.txt,docs和orcledb。

[[email protected] tmp]# ls -l

total 12

-rw-r--r--. 1 root root 0 May 15 10:43 bckrsync.sh

-rw-r--r--. 1 root root 0 May 15 10:44 bckup.txt

-rw-r--r--. 1 root root 0 May 15 10:46 dataconfig.txt

drwxr-xr-x. 2 root root 4096 May 15 10:45 docs

drwxr-xr-x. 2 root root 4096 May 15 10:44 oracledb

bckup.txt文件包含了需要备份的文件/目录的详情

[[email protected] tmp]# cat /tmp/bckup.txt

/tmp/oracledb

/tmp/dataconfig.txt

/tmp/docs

[[email protected] tmp]#

脚本 1:

#!/bin/bash

# 将备份列表文件的路径保存到变量中

backupf=‘/tmp/bckup.txt‘

# 输入一个提示信息

echo "Shell Script Backup Your Files / Directories Using rsync"

# 检查是否输入了目标服务器,如果为空就再次提示用户输入

while [ x$desthost = "x" ]; do

# 提示用户输入目标服务器地址并保存到变量

read -p "Destination backup Server : " desthost

# 结束循环

done

# 检查是否输入了目标文件夹,如果为空就再次提示用户输入

while [ x$destpath = "x" ]; do

# 提示用户输入目标文件夹并保存到变量

read -p "Destination Folder : " destpath

# 结束循环

done

# 逐行读取备份列表文件

for line in `cat $backupf`

# 对每一行都进行处理

do

# 显示要被复制的文件/文件夹名称

echo "Copying $line ... "

# 通过 rsync 复制文件/文件夹到目标位置

rsync -ar "$line" "$desthost":"$destpath"

# 显示完成

echo "DONE"

# 结束

done

运行带有输出结果的脚本

[[email protected] tmp]# ./bckrsync.sh

Shell Script Backup Your Files / Directories Using rsync

Destination backup Server : 104.*.*.41

Destination Folder : /tmp

Copying /tmp/oracledb ...

The authenticity of host ‘104.*.*.41 (104.*.*.41)‘ can‘t be established.

ECDSA key fingerprint is 96:11:61:17:7f:fa:......

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added ‘104.*.*.41‘ (ECDSA) to the list of known hosts.

[email protected]*.*.41‘s password:

DONE

Copying /tmp/dataconfig.txt ...

[email protected]*.*.41‘s password:

DONE

Copying /tmp/docs ...

[email protected]*.*.41‘s password:

DONE

[[email protected] tmp]#

脚本 2:

#!/bin/bash

# 将备份列表文件的路径保存到变量中

backupf=‘/tmp/bckup.txt‘

# 输入一个提示信息

echo "Shell Script Backup Your Files / Directories Using rsync"

# 检查是否输入了目标服务器,如果为空就再次提示用户输入

while [ x$desthost = "x" ]; do

# 提示用户输入目标服务器地址并保存到变量

read -p "Destination backup Server : " desthost

# 结束循环

done

# 检查是否输入了目标文件夹,如果为空就再次提示用户输入

while [ x$destpath = "x" ]; do

# 提示用户输入目标文件夹并保存到变量

read -p "Destination Folder : " destpath

# 结束循环

done

# 检查是否输入了目标服务器密码,如果为空就再次提示用户输入

while [ x$password = "x" ]; do

# 提示用户输入密码并保存到变量

# 使用 -s 选项不回显输入的密码

read -sp "Password : " password

# 结束循环

done

# 逐行读取备份列表文件

for line in `cat $backupf`

# 对每一行都进行处理

do

# 显示要被复制的文件/文件夹名称

echo "Copying $line ... "

# 使用 expect 来在脚本中输入密码

/usr/bin/expect << EOD

# 推荐设置超时为 -1

set timeout -1

# 通过 rsync 复制文件/文件夹到目标位置,使用 expect 的组成部分 spawn 命令

spawn rsync -ar ${line} ${desthost}:${destpath}

# 上一行命令会等待 “password” 提示

expect "*?assword:*"

# 在脚本中提供密码

send "${password}\r"

# 等待文件结束符(远程服务器处理完了所有事情)

expect eof

# 结束 expect 脚本

EOD

# 显示结束

echo "DONE"

# 完成

done

希望这些脚本对你备份会有帮助!!

免费领取兄弟连IT教育原创linux运维工程师视频/细说linux教程,详情咨询官网客服:http://www.lampbrother.net/linux/

或者勾搭Q2430675018

欢迎加入linux交流群 478068715

时间: 2024-11-03 03:36:06

Shell脚本:使用rsync备份文件/目录的相关文章

用shell脚本递归遍历某个目录下的所有文件并移动到某个指定的目录中

1,先看下脚本cat recursive.sh #!/bin/shread -p "input path:" FilePath function getAllfiles(){for file in ls $FilePathdoif [ -f $file ]thenecho $filemv $file /bak_file/elif test -d $filethenecho "-------------------------------->"cd $fileF

Shell脚本递归打印指定目录中所有目录文件

#!/bin/bash #递归打印当前目录下的所有目录文件. PRINTF() { ls $1 | while read line #一次读取每一行放到line变量中 do [ -d $1/$line ] && { DIR="$1/$line" echo $DIR } DIR1=`dirname $DIR` #求路径. A=`ls -F $DIR1 | grep / | grep "\<$line\>"` #判断line是不是一个目录.

shell脚本,在指定目录下通过随机小写10个字母加固定字符串oldboy批量创建10个html文件。

[[email protected] wyb]# cat test10.sh #!/bin/bash #使用for循环在/test10目录下通过随机小写10个字母加固定字符串oldboy批量创建10个html文件 dir=/root/wyb/test10/ [ ! -d $dir ] && mkdir -p $dir for i in `seq 10` do touch $dir`echo $RANDOM|md5sum|cut -c 1-10`_oldboy.html done [[ema

shell脚本之定时备份文件

#!/bin/bash tar -zcf /var/backup/etc_backup`date +20%y-%m-%d`.tar.gz /etc 编辑定时任务#crontab -e0 1 * /root/file_backup.sh 每天凌晨1点执行/etc备份任务 注意:需要事先存在/var/backup目录 原文地址:https://blog.51cto.com/11342825/2423033

shell脚本,如何监控目录下的文件内容是否被修改。

第一种方法是通过cmp来进行比对[[email protected] bo]# ls 1.html 2.html 3.html 4.html 5.html 6.html 7.html 8.html 9.html cat.sh [[email protected] bo]# cat cat.sh #!/bin/bash [ ! -f /root/wyb/bo/cat.log ] && cat *.html > /root/wyb/bo/cat.log cat *.html >tm

编写个shell脚本将/home/test 目录下大于10K的文件转移到/tmp目录下

#!/bin/sh cd /home/test for i in `ls -l |awk '{if($5>10240) {print $9}}'` do mv $i /tmp done

shell脚本,在不同目录下新建同名文件,并添加内容

#!/bin/bashdir=(/server/BlackCustomer /server/product  /server/Renewal  /server/shortmessage  /server/TrafficPool)for i in ${dir[*]};do        touch $i/start.sh        Filename=`basename $i`        echo '#!/bin/bash'>$i/start.sh        echo "echo

第三部分shell编程3(shell脚本2)

7. if 判断一些特殊用法 if [ -z $a ] 这个表示当变量a的值为空时会怎么样if grep -q '123' 1.txt; then 表示如果1.txt中含有'123'的行时会怎么样if [ ! -e file ]; then 表示文件不存在时会怎么样if (($a<1)); then …等同于 if [ $a -lt 1 ]; then… [ ] 中不能使用<,>,==,!=,>=,<=这样的符号 if [ ! $a -gt 0 ];then... 代表不大于

shell脚本练习题(更新中...)

练习题(这里贴的是自己写的代码, 网上给的题目代码我会附加在最下面) 1. 编写shell脚本,计算1-100的和: 1 #!/bin/bash 2 #caculate the sum of numbers from 1 to 100 3 4 sum=0 5 for i in `seq 1 100`; do 6 sum=$[$sum+$i] 7 done 8 echo $sum 2. 编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到