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/"--include"bb/"--include"ee" --exclude"/*" --progressrsync://127.0.0.1/site/work/backup/htdocs_bak/site
说明:
–include“aa/”–include“bb/”–include“ee”包含了你要同步的目录–exclude包含了不同步的目录所有用“/*”指定。
–exclude“/*”除了–include同步的目录外,排除其他目录
rsync://127.0.0.1/site为你rsync服务端要同步的目录
/work/backup/htdocs_bak/site为你客户端的目录
rsync同步指定正则文件(含子目录)
前阵子做日志备份,把各个服务器上的日志同步到日志服务器上做备份,刚开始比较暴力,把所有压缩好的*gz文件全部传送到日志备份服务器上。后来,发现这种方式非常不好,一旦备份的目录发生改变,服务器上又会把它所有的*gz文件全部再传一遍,即浪费时间又给服务i/o产生不必要的压力,后来想只同步某天的*gz文件。
需求描述:
有一个类似于这样的目录结构,子目录的个数是不确定的
[root@IND_tlbb]#tree . |--ReadMe.txt ||--Audit |`--Money_2013-09-10.tgz |--Audit_2013-09-10.tgz `--Install
我想同步*.py结尾的东东
同步完成后
[root@IND_tlbb]#tree . |--Audit |`--Money_2013-09-10.tgz `--Audit_2013-09-10.tgz
方式1:(失败)
rsync-auvz–include=”*${YDate}*gz”./192.168.137.22::tlbb
结果:会把所有的文件都同步过去了,连Install都同步过去了
方式2:
rsync-aruvz–include=”*${YDate}*gz”–include=”*/”–exclude=”*”./*192.168.137.22::tlbb
结果:能把今天所有的gz文件都正常传过去喽,先允许所有的匹配的gz文件,再允许所有子目录,最后拒绝所有其他的。
看到这里的朋友大家肯定发现了如果文件夹过多,肯定比较累,直接弄个txt文件将需要同步的与不需要同步都分别弄下就更好了,下面的方法在4.10版本中测试正常
1、只同步制定目录
如果当前目录文件夹有aa,bb,cc,dd等很多文件夹,我们只同步aa,bb,cc
先新建一个txt文件,例如include.txt
aa bb cc
只需要这么写就可以了--files-from="include.txt"
@echooff rsync-vzrtopg--progress--no-super--files-from="include.txt"--password-file=wtjb51.secrets/cygdrive/g/www/filesjb51net/web/jb51@ip::filesjb51
2、不要同步哪些同步
新建一个exclude.txt文件,不同步dd文件夹
dd
--exclude-from=exclude.txt
使用rsync-aP--exclude=upload只能排除upload文件/目录。
如果要排除多个文件/目录,怎么办?
那只能建一个exclude.list,里面填写要排除的目录(一行一个文件/目录),然后rsync-aP--exclude-from=“exclude.list“
如:rsync-aP--exclude-from=/root/exclude.list192.168.113.118::web_bak/www//data/server/www/(从118同步数据到本机)
补充
--exclude=PATTERNexcludefilesmatchingPATTERN
--exclude-from=FILEreadexcludepatternsfromFILE
--include=PATTERNdon'texcludefilesmatchingPATTERN
--include-from=FILEreadincludepatternsfromFILE
补充:
rsync-vau--files-from="/root/syncto.txt"--exclude-from="/root/excludefile.txt"/data/web/root@192.168.11.12:/data/web/用这种方式就可以了,其中syncto.txt写入要同步的文件,execludefile.txt存不需要同步的文件