4-10.9 Linux 中的文件同步传输 --- rsync --exclude 排除不需要传输的数据

  • --exclude 有时候使用 rsync 进行数据传输时,希望排除一些不需要传输的数据。这时,可以用 --exclude 参数排除指定数据,被排除的数据不会进行传输。
  • 4-10.9 内容:
    通过 rsync -a --exclude 学习传输数据时排除指定的数据。
  • 操作步骤:
    1、创建一些目录及文件用作测试。
  • 创建 backups_exclude 作为备份目录
[root@localhost ~]# cd test/
[root@localhost test]# ls
SRC
[root@localhost test]# mkdir backups_exclude    ## 新建 backups_exclude 备份目录
[root@localhost test]# 
[root@localhost test]# tree    ## 目录结构
.
├── backups_exclude
└── SRC
    ├── directory
    │   └── file2.txt
    └── file1.txt

3 directories, 2 files

  • 创建多几个源文件。SRC目录下创建 file3.txt 和 file4.txt。SRC目录下创建 office_directory 目录。office_directory 目录分别创建 docxfile.docx、elsxfile.elsx 和 pptxfile.pptx 三个文件。
[root@localhost test]# 
[root@localhost test]# touch SRC/file3.txt    ## touch 创建文件
[root@localhost test]# touch SRC/file4.txt
[root@localhost test]# 
[root@localhost test]# mkdir SRC/office_directory     ## mkdir 创建目录
[root@localhost test]# 
[root@localhost test]# touch SRC/office_directory/docxfile.docx
[root@localhost test]# touch SRC/office_directory/elsxfile.elsx
[root@localhost test]# touch SRC/office_directory/pptxfile.pptx
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_exclude
└── SRC
    ├── directory
    │   └── file2.txt
    ├── file1.txt
    ├── file3.txt
    ├── file4.txt
    └── office_directory
        ├── docxfile.docx
        ├── elsxfile.elsx
        └── pptxfile.pptx

4 directories, 7 files
[root@localhost test]# 

2、测试传输文件时排除指定目录 (office_directory)。

## rsync传输 SRC目录数据的时候排除其 office_directory目录内容
## --exclude='office_directory' 排除指定的内容

[root@localhost test]# rsync -av --exclude='office_directory' SRC/ backups_exclude/
sending incremental file list    ## 从传输列表可以看到没有 --office_directory 目录
./
file1.txt
file3.txt
file4.txt
directory/      ## 传输列表中只有 driectory目录
directory/file2.txt

sent 355 bytes  received 103 bytes  916.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost test]# 
[root@localhost test]# tree    ## 目录结构
.
├── backups_exclude    ## backups_exclude目录只有 directory 目录的数据,
                       ## office_directory没有传输过来
│   ├── directory
│   │   └── file2.txt
│   ├── file1.txt
│   ├── file3.txt
│   └── file4.txt
└── SRC
    ├── directory
    │   └── file2.txt
    ├── file1.txt
    ├── file3.txt
    ├── file4.txt
    └── office_directory
        ├── docxfile.docx
        ├── elsxfile.elsx
        └── pptxfile.pptx

5 directories, 11 files
[root@localhost test]# 
  • rsync -av --exclude='office_directory' SRC backups_exclude/
    当源目录不加 / 的时候,会把源目录整个目录递归式的传输目标目录下。如 SRC 不加 / ,SRC会整个目录递归式的传输到 backups_exclude 目录,office_directory 目录除外。
## 源目录 SRC 没有加 / 符号
[root@localhost test]# rsync -av --exclude='office_directory' SRC backups_exclude/
sending incremental file list
SRC/    ## 源目录 SRC 递归式传输内容。office_directory 目录除外。
SRC/file1.txt
SRC/file3.txt
SRC/file4.txt
SRC/directory/
SRC/directory/file2.txt

sent 366 bytes  received 104 bytes  940.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost test]# 
[root@localhost test]# tree    ## 目录结构
.
├── backups_exclude
│   └── SRC    ## SRC 目录递归过来 backups_exclude 目录
│       ├── directory
│       │   └── file2.txt
│       ├── file1.txt
│       ├── file3.txt
│       └── file4.txt
└── SRC
    ├── directory
    │   └── file2.txt
    ├── file1.txt
    ├── file3.txt
    ├── file4.txt
    └── office_directory
        ├── docxfile.docx
        ├── elsxfile.elsx
        └── pptxfile.pptx

6 directories, 11 files
[root@localhost test]# 

3、测试传输文件时排除指定类型的文件 (.txt 结尾)。

## rsync传输 SRC目录数据的时候排除 txt 结尾的文件
## --exclude='*.txt' 排除所有 txt 结尾的文件
[root@localhost test]# rsync -av --exclude='*.txt' SRC/ backups_exclude/
sending incremental file list    ## 从传输列表可以看出没有 txt 结尾的文件
./
directory/
office_directory/
office_directory/docxfile.docx
office_directory/elsxfile.elsx
office_directory/pptxfile.pptx

sent 329 bytes  received 88 bytes  834.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost test]# 
[root@localhost test]# tree    ## 目录结构
.
├── backups_exclude    ## backups_exclude 没有 txt结尾的文件
│   ├── directory
│   └── office_directory
│       ├── docxfile.docx
│       ├── elsxfile.elsx
│       └── pptxfile.pptx
└── SRC
    ├── directory
    │   └── file2.txt
    ├── file1.txt
    ├── file3.txt
    ├── file4.txt
    └── office_directory
        ├── docxfile.docx
        ├── elsxfile.elsx
        └── pptxfile.pptx

6 directories, 10 files
[root@localhost test]# 

4、 源目录不加 / 的时候,会把源目录整个目录递归式的传输目标目录下。所有 txt 后缀除外。

## SRC不加 / ,连同目录递归一同传输到 backups_exclude,所有 txt 后缀除外。

[root@localhost test]# rsync -av --exclude='*.txt' SRC backups_exclude/
sending incremental file list
SRC/
SRC/directory/
SRC/office_directory/
SRC/office_directory/docxfile.docx
SRC/office_directory/elsxfile.elsx
SRC/office_directory/pptxfile.pptx

sent 342 bytes  received 89 bytes  862.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_exclude
│   └── SRC    ## SRC 目录递归过来 backups_exclude 目录
│       ├── directory
│       └── office_directory
│           ├── docxfile.docx
│           ├── elsxfile.elsx
│           └── pptxfile.pptx
└── SRC
    ├── directory
    │   └── file2.txt
    ├── file1.txt
    ├── file3.txt
    ├── file4.txt
    └── office_directory
        ├── docxfile.docx
        ├── elsxfile.elsx
        └── pptxfile.pptx

7 directories, 10 files
[root@localhost test]# 

5、 rsync 传输时指定排除某一文件(file2.txt)

## --exclude='file2.txt'  传输时排除名为 file2.txt 的文件
[root@localhost test]# rsync -av --exclude='file2.txt' SRC/ backups_exclude/
sending incremental file list    ## 从传输列表可以看出没有传输 file2.txt
./
file1.txt
file3.txt
file4.txt
directory/
office_directory/
office_directory/docxfile.docx
office_directory/elsxfile.elsx
office_directory/pptxfile.pptx

sent 531 bytes  received 145 bytes  1,352.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_exclude    ## backups_exclude 没有 file2.txt文件
│   ├── directory
│   ├── file1.txt
│   ├── file3.txt
│   ├── file4.txt
│   └── office_directory
│       ├── docxfile.docx
│       ├── elsxfile.elsx
│       └── pptxfile.pptx
└── SRC
    ├── directory
    │   └── file2.txt
    ├── file1.txt
    ├── file3.txt
    ├── file4.txt
    └── office_directory
        ├── docxfile.docx
        ├── elsxfile.elsx
        └── pptxfile.pptx

6 directories, 13 files
[root@localhost test]# 

6、 rsync 传输时指定排除某些字符串开头的文件(file 字符串开头的文件)

## -av --exclude='file*' 传输时排除 file 字符串开头的文件

[root@localhost test]# rsync -av --exclude='file*' SRC/ backups_exclude/
sending incremental file list    ## 从传输列表看出,没有传输 file 开头的文件
./
directory/
office_directory/
office_directory/docxfile.docx
office_directory/elsxfile.elsx
office_directory/pptxfile.pptx

sent 329 bytes  received 88 bytes  834.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_exclude    ## backups_exclude 目录没有 file开头的文件
│   ├── directory
│   └── office_directory
│       ├── docxfile.docx
│       ├── elsxfile.elsx
│       └── pptxfile.pptx
└── SRC
    ├── directory    ## directory 目录下的文件是 file开头,所以排除传输
    │   └── file2.txt
    ├── file1.txt
    ├── file3.txt
    ├── file4.txt
    └── office_directory
        ├── docxfile.docx
        ├── elsxfile.elsx
        └── pptxfile.pptx

6 directories, 10 files
[root@localhost test]# 

7、 rsync 传输时排除含某些字符串的文件(含 c 字符的文件)

## -av --exclude='*c*' 传输时排除含 c 字符的目录和文件

[root@localhost test]# rsync -av --exclude='*c*' SRC/ backups_exclude/
sending incremental file list     ## 从传输列表看出,没有传输含 c 字符的目录和文件
./
file1.txt
file3.txt
file4.txt

sent 234 bytes  received 76 bytes  620.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_exclude    ## backups_exclude 目录没有含 c 字符的目录和文件
│   ├── file1.txt
│   ├── file3.txt
│   └── file4.txt
└── SRC
    ├── directory    ## directory 目录含有 c 字符,整个目录及内容排除传输
    │   └── file2.txt
    ├── file1.txt
    ├── file3.txt
    ├── file4.txt
    └── office_directory    ## office_directory 目录含有 c 字符,
                            ## 所以整个目录及内容排除传输
        ├── docxfile.docx
        ├── elsxfile.elsx
        └── pptxfile.pptx

4 directories, 10 files
[root@localhost test]# 

8、rsync 传输时排除某些字符串结尾的文件(x 字符结尾的文件)

##  -av --exclude='*x' 传输时排除 x 字符结尾的文件
[root@localhost test]# rsync -av --exclude='*x' SRC/ backups_exclude/
sending incremental file list    ## 从传输列表看出,没有传输 x 字符结尾的文件
./
file1.txt
file3.txt
file4.txt
directory/
directory/file2.txt
office_directory/

sent 405 bytes  received 107 bytes  1,024.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_exclude    ## backups_exclude 目录没有 x 字符结尾的目录和文件 
│   ├── directory
│   │   └── file2.txt
│   ├── file1.txt
│   ├── file3.txt
│   ├── file4.txt
│   └── office_directory
└── SRC
    ├── directory
    │   └── file2.txt
    ├── file1.txt
    ├── file3.txt
    ├── file4.txt
    └── office_directory    ## office_directory目录的文件都是 x 字符结尾,
                            ## 所以排除传输
        ├── docxfile.docx
        ├── elsxfile.elsx
        └── pptxfile.pptx

6 directories, 11 files
[root@localhost test]# 

9、多个排除条件可以用 { } 大扩号把条件括起来,条件与条件之间用 ,逗号分隔开。只用一个 --exclude参数。

例一:--exclude={'directory','docxfile.docx','elsxfile.elsx'}
条件 1:排除 directory 目录,因为 directory 没有 / 符号,所以是一个目录。
条件 2:排除名为 docxfile.docx 文件。
条件 3:排除名为 elsxfile.elsx 文件。

[root@localhost test]# rsync -av --exclude={'directory','docxfile.docx','elsxfile.elsx'} SRC/ backups_exclude/ 
sending incremental file list    ## 从传输列表可以看出排除了 directory 目录、docxfile.docx 和 elsxfile.elsx 文件
./
file1.txt
file3.txt
file4.txt
office_directory/
office_directory/pptxfile.pptx

sent 356 bytes  received 103 bytes  918.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_exclude    ## backups_exclude 没有排除条件的内容
│   ├── file1.txt
│   ├── file3.txt
│   ├── file4.txt
│   └── office_directory
│       └── pptxfile.pptx
└── SRC
    ├── directory
    │   └── file2.txt
    ├── file1.txt
    ├── file3.txt
    ├── file4.txt
    └── office_directory
        ├── docxfile.docx
        ├── elsxfile.elsx
        └── pptxfile.pptx

5 directories, 11 files
[root@localhost test]# 

  • 多条件排除,例二:--exclude={'e* ',' * 1 * ',' * 3 * ',' *tx'}
    条件 1:排除 e 开头的文件。
    条件 2:排除中间含有 1 的文件。
    条件 3:排除中间含有 3 的文件。
    条件 4:排除 tx 结尾的文件。
[root@localhost test]# rsync -av --exclude={'e*','*1*','*3*','*tx'} SRC/ backups_exclude/
sending incremental file list    ## 从传输列表看出 e 开头、中间含有 1 和 3、tx 结尾的文件都没有传输
./
file4.txt
directory/
directory/file2.txt
office_directory/
office_directory/docxfile.docx

sent 353 bytes  received 88 bytes  882.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_exclude    ## backups_exclude 目录没有 e 开头、中间含有 1 和 3、tx 结尾的文件
│   ├── directory
│   │   └── file2.txt
│   ├── file4.txt
│   └── office_directory
│       └── docxfile.docx
└── SRC    ## 源目录
    ├── directory
    │   └── file2.txt
    ├── file1.txt    ## 中间含有 1 的文件不会传输
    ├── file3.txt    ## 中间含有 3 的文件不会传输
    ├── file4.txt    
    └── office_directory
        ├── docxfile.docx
        ├── elsxfile.elsx    ## e 开头的文件不会传输
        └── pptxfile.pptx    ## tx 结尾的文件不会传输

6 directories, 10 files
[root@localhost test]# 

10、--exclude-from 通过加载文件的形式读取文件记录的参数,从而实现排除指定元素的功能。

## 首先,新建一个文档 --exclude-from
[root@localhost test]# touch exclude-file.txt
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_exclude
├── exclude-file.txt    ## 新建的 exclude-file.txt 文件
└── SRC
    ├── directory
    │   └── file2.txt
    ├── file1.txt
    ├── file3.txt
    ├── file4.txt
    └── office_directory
        ├── docxfile.docx
        ├── elsxfile.elsx
        └── pptxfile.pptx

4 directories, 8 files
[root@localhost test]# vim exclude-file.txt    ## vim 编辑 exclude-file.txt 文件

-------------- 输入的文本内容 -------------
*.txt    ## 输入所有 .txt结尾文件
~                                                                                                             
~  
~                                                                                                                                                                                                                 
:wq!    
------ 输入完内容按 Esc 键退出编辑状态,输入 :wq! 强制保存退出 -------

## --exclude-from='exclude-file.txt' 加载 exclude-file.txt,
## 读取其内容,它的内容是 *.txt。意思是所有 .txt 结尾的文件,
## 效果等同于 --exclude='*.txt'

[root@localhost test]# rsync -av --exclude-from='exclude-file.txt' SRC/ backups_exclude/
sending incremental file list    ## 从传输列表中看出没有 .txt 结尾的文件
./
directory/
office_directory/
office_directory/docxfile.docx
office_directory/elsxfile.elsx
office_directory/pptxfile.pptx

sent 329 bytes  received 88 bytes  834.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_exclude    ## backups_exclude 没有 .txt 结尾的文件
│   ├── directory
│   └── office_directory
│       ├── docxfile.docx
│       ├── elsxfile.elsx
│       └── pptxfile.pptx
├── exclude-file.txt
└── SRC
    ├── directory    ## 源文件 directory 下的都是 .txt 文件,符合排除条件
    │   └── file2.txt
    ├── file1.txt
    ├── file3.txt
    ├── file4.txt
    └── office_directory
        ├── docxfile.docx
        ├── elsxfile.elsx
        └── pptxfile.pptx

6 directories, 11 files
[root@localhost test]# 
                                           
  • 加载文件多项排除元素的方法,原理和在文件添加单项元素一样。只是,每个元素为一行。
## 同样的首先要编辑 exclude-file.txt 文档,每个排除的元素为一行。
[root@localhost test]# vim exclude-file.txt 

e*    ## e开头的文件
*1*    ## 文件名含 1 的字符
*3*    ## 文件名含 3 的字符
*tx    ## tx结尾的文件
~                                                                                                             
~                                                                                                             
~                                                                                                                                                                                                                  
:wq!         

## --exclude-from='exclude-file.txt' 加载 exclude-file.txt,
## 读取其内容,它的内容是 e*、*1*、*3*、*tx。
## 意思是所有 e 开头的文件、文件名含 1 的字符、文件名含 3 的字符 和 tx结尾的文件,
## 效果等同于--exclude={'e*','*1*','*3*','*tx'}

[root@localhost test]# rsync -av --exclude-from='exclude-file.txt' SRC/ backups_exclude/
sending incremental file list   ## 从传输列表看出 e 开头、中间含有 1 和 3、tx 结尾的文件都没有传输  
./
file4.txt
directory/
directory/file2.txt
office_directory/
office_directory/docxfile.docx

sent 353 bytes  received 88 bytes  882.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost test]# 
[root@localhost test]# tree
.
├── backups_exclude    ## backups_exclude 目录没有 e 开头、中间含有 1 和 3、tx 结尾的文件
│   ├── directory
│   │   └── file2.txt
│   ├── file4.txt
│   └── office_directory
│       └── docxfile.docx
├── exclude-file.txt
└── SRC    ## 源目录
    ├── directory
    │   └── file2.txt
    ├── file1.txt    ## 中间含有 1 的文件不会传输
    ├── file3.txt    ## 中间含有 3 的文件不会传输
    ├── file4.txt
    └── office_directory
        ├── docxfile.docx
        ├── elsxfile.elsx    ## e 开头的文件不会传输
        └── pptxfile.pptx    ## tx 结尾的文件不会传输

6 directories, 11 files
[root@localhost test]# 
                                   
  • 由上述测试可以得出 --exclude 排除的使用方法以及学会把排除元素写入文件,通过加载文件完成单项 或 多项排除任务。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,454评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,553评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,921评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,648评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,770评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,950评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,090评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,817评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,275评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,592评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,724评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,409评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,052评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,815评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,043评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,503评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,627评论 2 350

推荐阅读更多精彩内容