本文我们介绍一个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. jquery 获取鼠标位置

    //获取鼠标位置 $(function(){ $('body').mousemove(function(e) { e = e || window.event; __xx = e.pageX || e. ...

  2. iOS开发 UIPanGestureRecognizer手势抽象类

    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@sel ...

  3. 用RestTemplate碰到的问题

    给请求加上头信息 Request request = new Request(); HttpHeaders requestHeaders = new HttpHeaders(); requestHea ...

  4. C++ Primer 笔记(1)基础中的战斗机 输入输出 对输入不定数据处理

    今天打算再重新好好的看一遍C++ Primer这本很经典的书籍,笔记开始: 1.每个C++程序都包含一个或者多个函数,其中必须有一个main,操作系统通过调用main入手运行程序: 2.函数包括:返回 ...

  5. VS2012更改项目编译后文件输出目录

    1.现在我的解决方案里有存在两个项目,分别是类库项目ClassLibrary1和控制台项目ConsoleApplication1,默认情况下当解决方案重新生成后,这两个项目所对应的编译后文件分别会存在 ...

  6. 34-Ajax辅助方法

    Ajax是Asynchronous JavaScript and XML的缩写,是目前非常热门的网页开发技术之一,利用Ajax开发技术可以帮助网站减少切换页面的机会.加快网页响应速度.降低网络下载流量 ...

  7. robotframework笔记20

    配置执行 选择测试用例 机器人框架提供了几个选择的命令行选项 执行测试用例. 也工作在相同的选项 后处理输出与 Rebot . 通过测试套件和测试用例的名称 测试套件和测试用例可以选择通过他们的名字的 ...

  8. [redis] Jedis 与 ShardedJedis 设计

    Jedis设计 Jedis作为推荐的java语言redis客户端,其抽象封装为三部分: 对象池设计:Pool,JedisPool,GenericObjectPool,BasePoolableObjec ...

  9. 《基于MVC的Javascript》

    var Class = function(){ var klass = function(){ this.init.apply(this,arguments); } klass.prototype.i ...

  10. ERROR 1130: Host 'root@localhost' is not allowed to connect to MySQL server

    连接mysql时遇到的错误. 原因:该用户没有权限连接访问mysql数据库 解决方法:网站上搜了好多,试了都没有用.最终在登陆的信息页面用root用户登陆时不输入root密码即可.