rsync 如何排除文件同步指定的文件夹

很常见的情况:我想同步/下的 /usr /boot/ , 但是不想复制/proc /tmp 这些文件夹

如果想避开某个路径 直接添加–exclude 即可

比如–exclude “proc”

–exclude ‘sources’

Note: the directory path is relative to the folder you are backing up.

注意:这个路径必须是一个相对路径,不能是绝对路径
例子:源服务器/home/yjwan/bashshell有一个checkout文件夹

[root@CentOS5-4 bashshell]# ls -dl checkout

drwxr-xr-x 2 root root 4096 Aug 21 09:14 checkou

现在想要完全避开复制这个文件夹内容怎么办?

目标服务器执行

 rsync -av --exclude "checkout" yjwan@172.16.251.241:/home/yjwan/bashshell /tmp
将不会复制这个文件夹

[root@free /tmp/bashshell]# ls -d /tmp/bashshell/checkout

ls: /tmp/bashshell/checkout: No such file or directory
注意:
1事实上,系统会把文件和文件夹一视同仁,如果checkout是一个文件,一样不会复制
2如果想避开复制checkout里面的内容,可以这么写–exclude “checkout/123”
3切记不可写为—exclude “/checkout”这样绝对路径

这样写 将不会避免checkout被复制

比如

[root@free /tmp/bashshell]# rsync -av –exclude “/checkout” yjwan@172.16.251.241:/home/yjwan/bashshell /tmp

receiving file list … done

bashshell/checkout/
4可以使用通配符避开不想复制的内容

比如—exclude “fire*”

那么fire打头的文件或者文件夹全部不会被复制

5如果想要避开复制的文件过多,可以这么写

 --exclude-from=/exclude.list
exclude.list是一个文件,放置的位置是绝对路径的/exclude.list,为了避免出问题,最好设置为绝对路径。
里面的内容一定要写为相对路径
比如我想避开checkout文件夹和fire打头的文件
那么/exclude.list写为

checkout

fire*

然后执行以下命令,注意写为–exclude-from或者–exclude-from=都可以

但是不能为–exclude

rsync -av –exclude-from=”/exclude.list” yjwan@172.16.251.241:/home/yjwan/bashshell /tmp

检查结果:确实避开了checkout文件夹和fire打头的文件

问题:如何计算对比复制以后的文件数量是否正确呢?
1 查看错误日志,看是否复制时候出问题了

2在源服务器执行可知道具体文件和文件夹的总个数

ls –AlR|grep “^[-d]”|wc

然后目标服务器在计算一遍个数

看看数字是不是能对的上就ok了

对不上再研究怎么回事

3现在的问题是:如果我使用了–exclude参数就麻烦了

我怎么知道要复制几个文件?

首先,前面命令时候提到过一种写法,就是只有源地址,没有目标地址的写法,这种写法可以用来列出所有应该被复制的文件

那么用这个命令,可以计算出这个/root/bashshell下面文件和文件夹数量

在服务器端执行

[root@CentOS5-4 bashshell]# rsync -av /root/bashshell/ |grep “^[-d]” | wc

62 310 4249

和ls 得到的结果一致的

[root@CentOS5-4 bashshell]# ls -AlR |grep “^[-d]“|wc

62 558 3731

因此,比如说我不要fire打头的文件,可以在服务器端先这样计算要复制的文件

[root@CentOS5-4 bashshell]# rsync -av –exclude “fire*” /root/bashshell/ |grep “^[-d]” | wc

44 220 2695

然后复制过去

看目标机器的文件和文件夹数量为

[root@free /tmp]# ls -AlR /tmp/bashshell/ |grep “^[-d]“|wc

44 396 2554

可以知道2者是同步的

问题:Rsync的其他几个常见参数
1

-z –compress compress file data during the transfer

–compress-level=NUM explicitly set compression level

–skip-compress=LIST skip compressing files with suffix in LIST

压缩传输,如果网络带宽不够,那么应该压缩以后传输,消耗的当然是机器资源,但是如果内网传输的话,文件数量不是很多的话,这个参数不必要的。

2

–password-file=FILE

前面说过了,只有远端机器是rsync服务器,才能用这个参数

如果你以为个FILE写的是ssh登陆的密码,那就大错特错了,不少人犯了这个错误。

–stats: Adds a little more output regarding the file transfer status.

–progress: shows the progress of each file transfer. Can be useful to know if you have large files being backup up.

关于这个参数:

I frequently find myself adding the -P option for large transfers. It preserves partial transfers in case of interuption, and gives a progress report on each file as it’s being uploaded.

I move large media files back and forth on my servers, so knowing how long the transfer has remaining is very useful.

如何计算对比复制以后的文件数量是否正确呢?

查看错误日志看是否复制时候出问题了
在源服务器执行可知道具体文件和文件夹的总个数
ls –AlR|grep “^[d]”|wc
然后目标服务器在计算一遍个数
看看数字是不是能对的上就ok了
对不上再研究怎么回事
现在的问题是如果我使用了exclude参数就麻烦了

我怎么知道要复制几个文件?

首先前面命令时候提到过一种写法就是只有源地址没有目标地址的写法这种写法可以用来列出所有应该被复制的文件

那么用这个命令可以计算出这个/root/bashshell下面文件和文件夹数量

在服务器端执行

[root@CentOS bashshell]# rsync av /root/bashshell/ |grep “^[d]” | wc

和ls 得到的结果一致的
[root@CentOS bashshell]# ls AlR |grep “^[d]“|wc

因此比如说我不要fire 打头的文件可以在服务器端先这样计算要复制的文件
[root@CentOS bashshell]# rsync av exclude “fire*” /root/bashshell/ |grep “^[d]” | wc

然后复制过去
看目标机器的文件和文件夹数量为
[root@free /tmp]# ls AlR /tmp/bashshell/ |grep “^[d]“|wc

可以知道者是同步的

时间: 2024-10-23 20:13:08

rsync 如何排除文件同步指定的文件夹的相关文章

使用rsync命令同步指定的文件配置

有时需要把所有的文件同步到指定目录下,包括子目录. 执行之前确认要同步的文件名. # rsync -avmn --include='*/' --include='*.pdf' --exclude='*' /SRC/ /DEST/ 以下的2个命令的执行结果是一样的,把SRC目录下的指定文件(在这里是所有的pdf文件,包括子目录下),同步到DEST目录下,但是不同步空目录. # rsync -avm --include='*/' --include='*.pdf' --exclude='*' /SR

rsync只同步指定目录的方法(已测)_服务器其它

rsync同步指定目录rsync使用–include参数与–exclude参数来实现同步指定目录,并且–exclude目录放在后面. 例如: linux上文件目录 复制代码 代码如下: ls /usr/local/apache/htdocs/site aa bb cc dd ee .. zz 只想同步aa,bb,ee这三个目录,其他的不同步. 实现代码: 复制代码 代码如下: /usr/local/rsync/bin/rsync -azv  --include "aa/" --incl

rsync文件同步应用:客户端的配置

紧接上篇文章rsync文件同步应用--服务器端的配置,这片将讲解客户端的配置 那么在客户端的话就不需要配置什么配置文件了,可是很烦躁的是这些全部都是命令行,以下将慢慢讲解在客户端发出rsync命令来实现将服务器端的文件备份到客户端来.rsync是一个功能非常强大的工具,其命令也有很多功能特色选项 一,客户端安装rsync软件包 [root@test4 ~]# tar zxvf rsync-3.0.9.tar.gz [root@test4 ~]# cd rsync-3.0.9 [root@test

Linux 文件同步工具——rsync

1.介绍: rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了--remote sync. Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的"Rsync算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快. Rsync本来是用于替代rcp的一个工具,目前由rsync.samba.org维护,所以rsync

利用Rsync服务让SLB下多台centos服务器文件同步更新

利用Rsync服务让SLB下多台centos服务器文件同步更新 因为易淘帮使用了SLB负载均衡,为了保证SLB下两台服务器下面的网站文件同步,易淘帮采用了rsync服务进行同步,并进行了每三分钟同步一次.根据这样操作可以完美的使用slb服务,实现负载均衡.容灾恢复. 一. 介绍 rsync – remote synchronize是类unix系统下的数据镜像备份工具,它的特性如下: 1. 可以镜像保存整个目录树和文件系统. 2. 可以很容易做到保持原来文件的权限.时间.软硬链接等等. 3. 无须

RSync实现文件同步备份配置详解_服务器其它

一.什么是rsync rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息. rsync是用 "rsync 算法"提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件. rsync 包括如下的一些特性: 能更新整个目录和树和文件系统: 有选择性的保持符号链链.硬链接.文件属于.权限.设备以及时间等:

CentOS中rsync 文件同步/传输,增量备份传输利器使用教程

安装rsync CentOS/Fedora/RHEL: yum install rsync Debian/Ubuntu: apt-get install rsync rsync使用教程 rsync有两种工作方式:SSH和daemon. SSH方式是使用系统上的用户通过SSH进行同步操作. daemon方式是rsync服务器会开一个873端口,等待客户端去连接,连接是进行验证,通过后进行同步. 一.SSH模式下进行同步操作 rsync -options SRC DEST SRC代表源目录,DEST

linux系统中Rsync + Lsync实时文件同步配置详解

使用Rsync + Lsync可实现实时文件同步,本文就介绍如何配置Rsync + Lsync.并测试文件同步功能. 服务器信息: 主:10.86.255.154 从:10.86.255.155 1.从服务设定. 1.1.安装配置rsync xinet. # yum -y install rsync xinet # cp /etc/xinetd.d/rsync /etc/xinetd.d/rsync.bkp0625 # vim /etc/xinetd.d/rsync  # default: of

rsync+sersync+inotify实现服务器间文件同步

步骤一:rsync安装配置 安装和使用rsync 2.1 rsync的安装 每个镜像服务器(需要同步的服务器)都需要安装rsync守护进程. 一般发行版都带有rsync,因此我这里直接使用yum安装.当然在很多发行版上默认已经安装了rsync.  代码如下 复制代码     [root@web1 ~]# yum install rsync     [root@web1 ~]# rpm -ql rsync     /etc/xinetd.d/rsync     /usr/bin/rsync