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

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

[root@Fedora21 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文件包含了需要备份的文件/目录的详情

[root@Fedora21 tmp]# cat /tmp/bckup.txt

/tmp/oracledb

/tmp/dataconfig.txt

/tmp/docs

[root@Fedora21 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

运行带有输出结果的脚本

[root@Fedora21 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.

root@104.*.*.41's password:

DONE

Copying /tmp/dataconfig.txt ...

root@104.*.*.41's password:

DONE

Copying /tmp/docs ...

root@104.*.*.41's password:

DONE

[root@Fedora21 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.itxdl.cn/linux/

或者勾搭Q2430675018

欢迎加入linux交流群 478068715

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

  1. python调用shell脚本时需要切换目录

    最近遇到了一个问题,就是python代码调用shell脚本时,发现输入输出的文件,总是和自己预想的有偏差,但是单独在linux下执行命令的时候,却没有错误.后来发现是相对路径的问题,因为执行pytho ...

  2. shell脚本 inotify + rsync 同步脚本

    1.这是很简单的一个 文件监控+触发同步脚本 监控一台服务器下的一个文件夹,发生改变则向另一个个文件夹进行同步. 具体的inotify命令  rsync命令  可以看linux分类下的介绍 inoti ...

  3. shell脚本:统计分析 /home/ 目录用户磁盘使用情况

    一.统计单台机器 /home/ 目录下磁盘空间使用 top3 的用户 common.sh 脚本用于统计 /home/* 目录下存储空间 top3 的用户. du -sb /home/* |sort - ...

  4. Shell脚本 server rsync 控制脚本

    [root@backup ~]# vim /etc/init.d/rsync#!/bin/bash #this script for start|stop rsync daemon service s ...

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

    [root@localhost wyb]# cat test10.sh #!/bin/bash #使用for循环在/test10目录下通过随机小写10个字母加固定字符串oldboy批量创建10个htm ...

  6. shell 脚本,将/etc/目录下所有的软链接文件输出

    #!/bin/bash # cd /etc for a in *;do if [ -L $a ];then #如果文件存在,为软链接文件且指向的是文件,则返回真 echo $a fi done 测试:

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

    第一种方法是通过cmp来进行比对[root@localhost bo]# ls .html .html .html .html .html .html .html .html .html cat.sh ...

  8. shell脚本查询某一目录的某一部分文件并且拷贝到其他目录(有则跳过没有则拷贝)

    #!/bin/bash dir=`ls /root//*` for i in $dir do #basename 返回一个字符串参数的基本文件名称.(只剩下文件名除去路径名) a=`basename ...

  9. 编写个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

随机推荐

  1. iOS - Swift NSEnumerator 迭代器

    前言 public class NSEnumerator : NSObject, NSFastEnumeration 1.迭代器 let arr:NSArray = ["bei", ...

  2. [转载] TCP协议缺陷不完全记录

    原文: http://www.blogjava.net/yongboy/archive/2015/05/07/424917.html tcp是一个非常复杂并且古老的协议, 之前教科书上将的很多东西应用 ...

  3. 学习日记day7:代码结构规范

    1:绝对定位不是随便用的. 2:一定要用相对定位控制文档流,在相对定位里面使用绝对定位控制具体的位置. 3:代码结构尽量简化. 不要加不必要的span: 不要加不必要的类: 4:控制字体样式的类尽量写 ...

  4. For Exam (Java常用设计模式) 介绍

    一 创建型模式 工厂模式(Factory): 定义一个用以创建对象的接口 抽象工厂模式(Abstract Factory): 提供一个创建一系列相关或相互依赖对象的接口 单例模式(Singleton) ...

  5. apiCloud中图片裁剪模块FNImageClip的使用

    思路 1.获取需裁剪图片的地址 2.跳转到裁剪页面 3.裁剪成功返回新图片地址 4.替换原有图片地址 增加修饰和事件 str += '<li class="tu image" ...

  6. LVS--NAT模型配置

    环境准备 管理IP地址 角色 备注 192.168.11.131 调度器(Director) 对外提供VIP服务的地址为192.168.1.114 192.168.11.132 RS1  网关为192 ...

  7. POJ 2418 各种二叉排序树

    题意很明确,统计各个字符串所占总串数的百分比,暴力的话肯定超时,看了书上的题解后发现这题主要是用二叉排序树来做,下面附上n种树的代码. 简单的二叉排序树,不作任何优化(C语言版的): #include ...

  8. Asp.NET设置Session过期时间的四种方式

    在Asp.net中,可以有四处设置Session的过期时间: 一.全局网站(即服务器)级 IIS-网站-属性-Asp.net-编辑配置-状态管理-会话超时(分钟)-设置为120,即为2小时,即120分 ...

  9. $.each 与$().each()

    在jquery中,遍历对象和数组,经常会用到$().each和$.each(),两个方法.两个方法是有区别的,从而这两个方法在针对不同的操作上,显示了各自的特点. $().each,对于这个方法,在d ...

  10. UAT 环境

    User Accept Environment 用户仿真测试环境