使用rsync 的 --delete参数删除目标目录比源目录多余的文件

最近在处理策划资源文件的时候需要将目录A的文件全部同步到目录B的文件,并且把目录B内多余的文件全部删除掉。所以,就想到了使用rsync的--delete参数来实现功能。

创建示例如下:
//创建两个测试目录
$ mkdir {dirA,dirB}

//分别在两个目录创建相应的文件
$ touch dirA/{fileA1.txt,fileA2.txt,fileA3.txt}
$ touch dirB/{fileA1.txt,fileA2.txt,fileA3.txt,fileB1.txt,fileB2.txt,fileB3.txt}

1)将dirA的所有文件同步到dirB内,并保留文件的属主,属组,文件权限等信息。

$ rsync -avz dirA/ dirB/

sending incremental file list
./
fileA1.txt
fileA2.txt
fileA3.txt

sent 199 bytes  received 72 bytes  542.00 bytes/sec
total size is 0  speedup is 0.00

2)将dirA的所有文件同步到dirB内,并删除dirB内多余的文件
$ rsync -avz --delete  dirA/ dirB/

sending incremental file list
./
deleting fileB3.txt
deleting fileB2.txt
deleting fileB1.txt
fileA1.txt
fileA2.txt
fileA3.txt
sent 203 bytes  received 72 bytes  550.00 bytes/sec
total size is 0  speedup is 0.00

3)将dirA的所有文件同步到dirB,但是在dirB内除了fileB3.txt这个文件不删之外,其他的都删除。
$rsync -avz --delete --exclude "fileB3.txt"  dirA/  dirB/

sending incremental file list
./
deleting fileB2.txt
deleting fileB1.txt
fileA1.txt
fileA2.txt
fileA3.txt

sent 203 bytes  received 72 bytes  550.00 bytes/sec
total size is 0  speedup is 0.00

4)将dirA目录内的fileA1.txt和fileA2.txt不同步到dirB目录内。
$rsync -avz --exclude="fileA1.txt" --exclude="fileA2.txt" dirA/ dirB/

sending incremental file list
fileA3.txt

sent 106 bytes  received 31 bytes  274.00 bytes/sec
total size is 0  speedup is 0.00

5) 将dirA目录内的fileA1.txt和fileA2.txt不同步到dirB目录内,并且在dirB目录内删除多余的文件。
$rsync -avz --exclude="fileA1.txt" --exclude="fileA2.txt" --delete  dirA/ dirB/

sending incremental file list
deleting fileB3.txt
deleting fileB2.txt
deleting fileB1.txt
fileA3.txt
sent 106 bytes  received 31 bytes  274.00 bytes/sec
total size is 0  speedup is 0.00

6)将dirA目录内的fileA1.txt和fileA2.txt不同步到dirB目录内,并且在dirB目录内删除多余的文件,同时,如果dirB内有fileA2.txt和fileA1.txt这两个被排除同步的文件,仍然将其删除。

$rsync -avz --exclude="fileA1.txt" --exclude="fileA2.txt"  --delete-excluded  dirA/ dirB/

sending incremental file list
./
deleting fileB3.txt
deleting fileB2.txt
deleting fileB1.txt
deleting fileA2.txt
deleting fileA1.txt
fileA3.txt

sent 109 bytes  received 34 bytes  286.00 bytes/sec
total size is 0  speedup is 0.00

这里可以看到只有fileA3.txt被同步到dirB目录内,同时dirB目录内的fileA1.txt和fileA2.txt两个被过滤的文件也被删除掉了。

这里分享一下学习经验,学一个东西不要总是很被动的去学习它有多少功能,要根据自己的实际应用场景来选择自己需要的功能。这样才能印象深刻。

http://www.linuxidc.com/Linux/2014-03/98835.htm

时间: 2024-10-13 01:40:23

使用rsync 的 --delete参数删除目标目录比源目录多余的文件的相关文章

rsync同步时,删除目标目录比源目录多余文件的方法(--delete)

在日常运维工作中,我们经常会用到rsync这个同步神器.有时在同步两个目录时,会要求删除目标目录中比源目录多出的文件,这种情况下,就可用到rsync的--delete参数来实现这个需求了. 比如: 在服务器A上同步/tmp/work目录到远程服务器B的/tmp/work目录下(A和B已经提前做好ssh无密码信任跳转关系了),同时删除B服务器/tmp/work目录下相比于A服务器/tmp/work中多余的文件 最近在处理策划资源文件的时候需要将目录A的文件全部同步到目录B的文件,并且把目录B内多余

rsync的命令参数【转】

本篇文章,我们只介绍rsync的命令参数. rsync参数的具体解释如下: -v, –verbose 详细模式输出 -q, –quiet 精简输出模式 -c, –checksum 打开校验开关,强制对文件传输进行校验 -a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD. -r, –recursive 对子目录以递归模式处理 -R, –relative 使用相对路径信息 -b, –backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老

Rsync介绍和参数

一.Rsync Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据镜像同步备份的优秀工具.rsync适用于unix/linux/windows等多种操作系统平台. http://www.samba.org/ftp/rsync/rsync.html Rsync全称为remoterynchronization,rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像.远程备份的功能,这个功能类似于scp命令,但优于scp.还可以在本地主机的不同分区或目录之间全量及增量的

Rsync使用中常见参数的说明

5.Rsync使用中常见参数的说明.md 常见参数说明 motd file:定义当客户端访问时看到的信息,默认为空. pid fle:定义rsync daemon将其PID写入的文件,如果此文件存在rsync,daemon会终止而不是覆盖. port:定义daemon监听的端口,默认为873. address:覆盖daemon默认监听的IP地址.如果daemon是被inetd启动,并且有 --address参数时,会被忽略. socket options:用来防止被人不停的连接.可以设置为所有s

File delete不能删除问题

注意事项有以下几点 1.检查是否是文件流没有关闭.如果没有关闭的话文件当前是被占用状态,是删除不了的. 2.是否关闭完全.比如你循环创建好多文件流,只在finally 模块写了个关闭流的方法,这样写很可能只关闭最后一个文件流.导致除了最后一个文件能删除,其余都不能删除. 4.文件是否存在,file.exists() 检查下. File delete不能删除问题,布布扣,bubuko.com

删除一个目录下的所有文件,但保留一个指定文件

此题问题虽小,但是初学者还是很难给出合理的答案的!本文来自老男孩21期网络班学员 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 面试题:删除一个目录下的所有文件,但保留一个指定文件 解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10  十个文件

linux面试题:删除一个目录下的所有文件,但保留一个指定文件

此题问题虽小,但是初学者还是很难给出合理的答案的!本文来自老男孩21期网络班学员 面试题:删除一个目录下的所有文件,但保留一个指定文件 解答: 假设这个目录是/xx/,里面有file1,file2,file3..file10  十个文件 [[email protected] xx]# touch file{1..10} [[email protected] xx]# ls file1  file10  file2  file3  file4  file5  file6  file7  file8

删除某一路径下所有文件

想删除某一路径之下所有文件: 删除文件,Insus.NET 写了2个方法,名称一样,重载而已. 原理简单,即是循环指定路径下所有目录和子目录来进行删除文件.重载的方法,带多一个参数.是想删除几天前的文件,根扰文件的创建日期来判断. 代码高亮的一行,Insus.NET是想这个数据不管使用这个方法,输入一个正数或是负数均可.最终处理为一个负数. 写到这里,你还可以限制不能输入0值. public static void DeleteAllFiles(string physicalPath) { Di

js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中

ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId = 'jUploadFrame' + id; if(window.ActiveXObject) { var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '&qu