在日常运维工作中,我们经常用到rsync这个同步神器。有时在同步两个目录时,会要求删除目标目录中比源目录多出的文件,这种情况下,就可用到rsync的--delete参数来实现这个需求了。

实例说明:
在服务器A上同步/tmp/work目录到远程服务器B的/tmp/work目录下(A和B已经提前做好ssh无密码信任跳转关系了),同时删除B服务器/tmp/work目录下相比于A服务器/tmp/work中多余的文件
最近在处理策划资源文件的时候需要将目录A的文件全部同步到目录B的文件,并且把目录B内多余的文件全部删除掉。所以,就想到了使用rsync的--delete参数来实现功能。

1)A服务器

[root@serverA ~]# cd /tmp/work
[root@serverA work]# ls
a b c d 11

2)B服务器

[root@serverB ~]# cd /tmp/work
[root@serverB work]# ls
c d 11 12 13 fg 5t

3)从A服务器同步到B服务器(假设B服务器ip是11.11.11.11)

[root@serverA work]# rsync -e "ssh -p22" -avpz --delete  ./ root@11.11.11.11:/tmp/work/    #注意,--delete参数要放在源目录和目标目录前,并且两个目录结构一定要一致!不能使用./*
sending incremental file list
./
deleting fg
deleting 5t
deleting 13
deleting 12
11
a
b
c
dsent 248 bytes received 110 bytes 716.00 bytes/sec
total size is 0 speedup is 0.00

4)再次查看B服务器,发现已经跟A服务器的/tmp/work目录同步了,并且删除了多余的文件

[root@serverB ~]# cd /tmp/work
[root@serverB work]# ls
a b c d 11

********************************************************************************

扩展:

下面根据示例说明几个用法:

$ 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/       #源目录和目标目录结构一定要一致!!不能是dirA/* dirB/  或者dirA/ dirB/*  或者 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两个被过滤的文件也被删除掉了。

*********************************************************************************************************

要在Linux下删除海量文件的情况,需要删除数十万个文件。这个是之前的程序写的日志,增长很快,而且没什么用。这个时候,我们常用的删除命令rm -fr * 就不好用了,因为要等待的时间太长。所以必须要采取一些非常手段。我们可以使用rsync的--delete-before参数来实现快速删除大量文件。

1)建立一个空的文件夹:
mkdir /tmp/test
2)用rsync删除目标目录:
rsync --delete-before -a -H -v --progress --stats /tmp/test/ log/
这样我们要删除的log目录就会被清空了,删除的速度会非常快。rsync实际上用的是替换原理,处理数十万个文件也是秒删。

选项说明:
--delete-before 接收者在传输之前进行删除操作
--progress 在传输时显示传输过程
--a 归档模式,表示以递归方式传输文件,并保持所有文件属性
--H 保持硬连接的文件
--v 详细输出模式
--stats 给出某些文件的传输状态

linux rsync同步 --delete参数 删除目标目录比源目录多余文件相关推荐

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

    在日常运维工作中,我们经常用到rsync这个同步神器.有时在同步两个目录时,会要求删除目标目录中比源目录多出的文件,这种情况下,就可用到rsync的–delete参数来实现这个需求了. 实例说明: 在 ...

  2. linux之在当前目录下删除不包含aa的文件

    1.问题 1.当前目录下删除不包含aa的文件和文件夹 2.解决办法 1. rm -rf `ls -al | grep -v "aa"`

  3. 批处理删除编译产生的多余文件

    前段时间由于工作需要,隔断时间就要转移一次代码.本来纯代码文件加上一些文档只有200多M,但是在编译的时候生成了很多中间文件,一下子就增大到了几个G.给转移工作带来了很多问题,所以就想通过批处理来删除 ...

  4. linux+传输文件时卡住,linux - rsync 同步文件时卡住不动

    具体表现是:我使用rsync往服务器同步文件,我设置了超时timeout=5(不设置这个值也会出现这样的问题),然后运行大约1小时后,不断出现timeout的错误提示,出现大约10多个后,程序卡在rs ...

  5. rsync同步服务实验讲解

    rsync 同步服务 复制: 源所有数据 同步: 只传输变化数据 • 命令用法 – rsync [选项...] 源目录 目标目录 • 本地同步 – rsync [选项...] 本地目录1 本地目录2 ...

  6. linux中du命令参数的用法,linux中du命令参数及df命令和dd命令介绍

    本文详细介绍了linux中du命令参数及df命令和dd命令的使用方法,并对之进行了举例说明. linux中df命令参数 linux中df命令参数功能:检查文件系统的磁盘空间占用情况.可以利用该命令来获 ...

  7. Delphi下物理删除dBase数据库的*.dbf文件

    { ************************************************************ } {                                   ...

  8. Linux下同步工具inotify+rsync使用详解

    1. rsync 1.1 什么是rsync rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.它使用所谓的"Rsync演算法"来使本地和远程两个主机之 ...

  9. linux rsync删文件速度,Linux下使用rsync最快速删除大量文件的方法

    要在Linux下删除海量文件的情况,需要删除三层哈希目录下的几十万个文件.这个时候,删除命令rm -rf * 就不好用了,因为要等待的时间太长.所以必须要采取一些非常手段.我们可以使用rsync来实现 ...

最新文章

  1. Vue 2 | Part 4 v-bind绑定元素属性和样式
  2. 5 行代码实现图像分割
  3. 体外反搏做_体外反搏治疗的原理
  4. vector 查找最大最小值,且求最大值或者最小值在容器中的位置
  5. 写一副对子_挥毫泼墨写春联 西安街头年味分外浓
  6. MFC和OpenCV结合
  7. Linux系统断电后起不来,centos/linux 断电后,开机光标闪现不能开启,重新引导
  8. 收藏 | 机器学习领域必知必会的12种概率分布(附Python代码实现)
  9. webStrom破解链接
  10. 从各方面比较一下各类电脑玩手游吃鸡安卓模拟器
  11. python:base64与图片的互转
  12. python 物理引擎_第十六章:物理引擎
  13. Vue2 + ElementUI登录界面模板
  14. 微信营销社群营销推广方案--精华版
  15. 学习笔记(03):ArcGIS10.X入门实战视频教程(GIS思维)-坐标系与地理坐标系
  16. 随身车联网——车联网生态新物种(附发布会视频)
  17. shiro基本使用和完成登录
  18. css过渡-动画-变换
  19. 找不到bridge.dll文件
  20. 2021秋招复盘【基础版】

热门文章

  1. shell 输入输出脚本
  2. XDP/eBPF — Overview
  3. 5G 信令流程 — UE 寻呼(Paging)流程
  4. OpenStack Rally 质量评估与自动化测试利器
  5. NR 5G 网络切片
  6. mongodb安装和配置
  7. 如何在linux下修改组权限
  8. 探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
  9. Tushare的安装
  10. AIX 3D32B80D 错误