经得起考验的应急接管与容灾 12月05日 星期五 15:00 云祺视频号准时直播
云祺直播二维码
扫码预约直播,观看精彩内容! 扫码预约直播,观看精彩内容!
关闭按钮
云祺Logo 云祺Logo
关于我们

技术分享

技术分享 Shell脚本:使用rsync备份文件/目录

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

2019-01-23


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


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

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


  1. [root@Fedora21 tmp]# ls -l

  2. total 12

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

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

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

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

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

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


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

  2. /tmp/oracledb

  3. /tmp/dataconfig.txt

  4. /tmp/docs

  5. [root@Fedora21 tmp]#

脚本 1:


  1. #!/bin/bash

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

  3. backupf='/tmp/bckup.txt'

  4. # 输入一个提示信息

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

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

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

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

  9. read -p "Destination backup Server : " desthost

  10. # 结束循环

  11. done

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

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

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

  15. read -p "Destination Folder : " destpath

  16. # 结束循环

  17. done

  18. # 逐行读取备份列表文件

  19. for line in `cat $backupf`

  20. # 对每一行都进行处理

  21. do

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

  23. echo "Copying $line ... "

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

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

  26. # 显示完成

  27. echo "DONE"

  28. # 结束

  29. done

运行带有输出结果的脚本


  1. [root@Fedora21 tmp]# ./bckrsync.sh

  2. Shell Script Backup Your Files / Directories Using rsync

  3. Destination backup Server : 104.*.*.41

  4. Destination Folder : /tmp

  5. Copying /tmp/oracledb ...

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

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

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

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

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

  11. DONE

  12. Copying /tmp/dataconfig.txt ...

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

  14. DONE

  15. Copying /tmp/docs ...

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

  17. DONE

  18. [root@Fedora21 tmp]#

脚本 2:


  1. #!/bin/bash

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

  3. backupf='/tmp/bckup.txt'

  4. # 输入一个提示信息

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

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

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

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

  9. read -p "Destination backup Server : " desthost

  10. # 结束循环

  11. done

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

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

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

  15. read -p "Destination Folder : " destpath

  16. # 结束循环

  17. done

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

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

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

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

  22. read -sp "Password : " password

  23. # 结束循环

  24. done

  25. # 逐行读取备份列表文件

  26. for line in `cat $backupf`

  27. # 对每一行都进行处理

  28. do

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

  30. echo "Copying $line ... "

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

  32. /usr/bin/expect << EOD

  33. # 推荐设置超时为 -1

  34. set timeout -1

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

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

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

  38. expect "*?assword:*"

  39. # 在脚本中提供密码

  40. send "${password}\r"

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

  42. expect eof

  43. # 结束 expect 脚本

  44. EOD

  45. # 显示结束

  46. echo "DONE"

  47. # 完成

  48. done

运行第二个带有输出结果的脚本的屏幕截图

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


云祺备份软件,云祺容灾备份系统,虚拟机备份,数据库备份,文件备份,实时备份,勒索软件,美国,图书馆
  • 标签:
  • 行业资讯

您可能感兴趣的新闻 换一批

现在下载,可享15天免费试用

立即下载

请添加好友为您提供支持
jia7jia_7

微信售后服务二维码

请拨打电话
为您提供支持

400-9955-698