美文网首页
4-10.7 Linux 中的文件同步传输 --- rsync

4-10.7 Linux 中的文件同步传输 --- rsync

作者: 捌千里路雲和月 | 来源:发表于2021-08-13 01:07 被阅读0次
    • -r / --recursive 对子目录以递归模式处理
    • 4-10.7 内容:
      通过 rsync -r / --recursive 递归传输目录内容。
    • 操作步骤:
      1、新建一个 backups_r 目录用作 -v 参数测试的目标目录。SRC 目录下创建 file1.txt 文件。SRC 目录下创建 directory 子目录,directory 目录下创建 file2.txt 文件,目录结构如 tree。
    [root@localhost ~]# ls
    test
    [root@localhost ~]# cd test
    [root@localhost test]# 
    [root@localhost test]# mkdir backups_r
    [root@localhost test]# 
    [root@localhost test]# touch SRC/file1.txt
    [root@localhost test]# 
    [root@localhost test]# mkdir SRC/directory
    [root@localhost test]# 
    [root@localhost test]# touch SRC/directory/file2.txt
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_r
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    3 directories, 2 files
    [root@localhost test]# 
    
    

    2、SRC 目录下有子目录,rsync 和 rsync -r 传输 SRC/ 对比。

    [root@localhost test]# rsync SRC/ backups_r/
    skipping directory .    ## 没有 -r会跳过目录传输,因为纯 rsync只能传输文件 
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_r    ## backups_r目录没有任何文件。
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    3 directories, 2 files
    
    ## -r 可以传输目录,并且递归传输目录下的所有内容
    [root@localhost test]# rsync -r SRC/ backups_r/   
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_r    ## SRC目录下的所有内容都传输到 backups_r
    │   ├── directory
    │   │   └── file2.txt
    │   └── file1.txt
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    4 directories, 4 files
    [root@localhost test]# 
    [root@localhost test]# ll SRC/    
    total 0
    drwxr-xr-x. 2 root root 23 Aug 12 22:22 directory
    -rw-r--r--. 1 root root  0 Aug 12 22:20 file1.txt
    [root@localhost test]# 
    [root@localhost test]# ll backups_r/    ## 除了时间以外,其余属性和 SRC源目录一致
    total 0
    drwxr-xr-x. 2 root root 23 Aug 12 23:23 directory
    -rw-r--r--. 1 root root  0 Aug 12 23:23 file1.txt
    [root@localhost test]# 
    
    
    • 当然,也可以用 -a 参数,-a 也可以把一个目录下的所有内容传输到另一个目录。传输的内容属性和源内容一致。清空一下 backups_r 下的内容,再用 rsync -a 试试。
    [root@localhost test]# rsync -a SRC/ backups_r/
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_r
    │   ├── directory
    │   │   └── file2.txt
    │   └── file1.txt
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    4 directories, 4 files
    [root@localhost test]# 
    [root@localhost test]# ll SRC/
    total 0
    drwxr-xr-x. 2 root root 23 Aug 12 22:22 directory
    -rw-r--r--. 1 root root  0 Aug 12 22:20 file1.txt
    [root@localhost test]# 
    [root@localhost test]# ll backups_r/    ## 属性和 SRC源目录一致
    total 0
    drwxr-xr-x. 2 root root 23 Aug 12 22:22 directory
    -rw-r--r--. 1 root root  0 Aug 12 22:20 file1.txt
    [root@localhost test]# 
    

    3、rsync 和 rsync -r 传输 SRC 目录不加 / 对比

    • 首先清空目标目录下的所有内容.
    [root@localhost test]# ls
    backups_r  SRC
    [root@localhost test]# tree
    .
    ├── backups_r
    │   ├── directory
    │   │   └── file2.txt
    │   └── file1.txt
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    4 directories, 4 files
    [root@localhost test]# rm -rf backups_r/*    ## 删除 backups_r目录下所有内容
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_r    ## backups_r已清空
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    3 directories, 2 files
    [root@localhost test]# 
    
    
    • SRC 目录不带 / ,把整个 SRC 目录传输到 backups_r 目录下对比。
    [root@localhost test]# rsync SRC backups_r/
    skipping directory SRC    ## 没有 -r会跳过 SRC 目录
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_r
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    3 directories, 2 files
    
    ## -r 可以把整个 SRC 目录传输到 backups_r下
    [root@localhost test]# rsync -r SRC backups_r/
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_r  ## 整个 SRC 目录传输到 backups_r
    │   └── SRC
    │       ├── directory
    │       │   └── file2.txt
    │       └── file1.txt
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    5 directories, 4 files
    [root@localhost test]# 
    [root@localhost test]# 
    [root@localhost test]# ll SRC/
    total 0
    drwxr-xr-x. 2 root root 23 Aug 12 22:22 directory
    -rw-r--r--. 1 root root  0 Aug 12 22:20 file1.txt
    [root@localhost test]# 
    [root@localhost test]# ll backups_r/SRC/
    total 0
    drwxr-xr-x. 2 root root 23 Aug 12 23:53 directory
    -rw-r--r--. 1 root root  0 Aug 12 23:53 file1.txt
    [root@localhost test]# 
    
    
    • 同样的也可以用 -a 实现把整个目录传输到另一个目录的操作。属性也是和源一致。
    [root@localhost test]# 
    [root@localhost test]# rsync -a SRC backups_r/  
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_r
    │   └── SRC
    │       ├── directory
    │       │   └── file2.txt
    │       └── file1.txt
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    5 directories, 4 files
    [root@localhost test]# ll SRC/
    total 0
    drwxr-xr-x. 2 root root 23 Aug 12 22:22 directory
    -rw-r--r--. 1 root root  0 Aug 12 22:20 file1.txt
    [root@localhost test]# 
    [root@localhost test]# ll backups_r/SRC/    ## rsync -a 同步了原 SRC的属性(时间)
    total 0
    drwxr-xr-x. 2 root root 23 Aug 12 22:22 directory
    -rw-r--r--. 1 root root  0 Aug 12 22:20 file1.txt
    [root@localhost test]# 
    
    

    4、SRC 目录下有子目录,rsync 和 rsync -r 传输 SRC/* 对比。

    • 首先还是要清一清 backups_r 目录下的内容。
    [root@localhost test]# rm -rf backups_r/*
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_r
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    3 directories, 2 files
    [root@localhost test]# 
    
    
    • rsync 和 rsync -r 传输 SRC/* 对比
    [root@localhost test]# rsync SRC/* backups_r/
    skipping directory directory    ## 没有 -r 传输 SRC 下所有内容,
                                    ## 可以很明显看出只传输文件,跳过目录。
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_r
    │   └── file1.txt    ## 只成功传输了文件
    └── SRC
        ├── directory    ## 被跳过的 directory 目录
        │   └── file2.txt
        └── file1.txt
    
    3 directories, 3 files
    [root@localhost test]# 
    [root@localhost test]# rm -rf backups_r/*
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_r
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    3 directories, 2 files
    [root@localhost test]# rsync -r SRC/* backups_r/
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_r    ## -r 可以把 SRC 目录下的所有内容递归传输到 backups_r 
    │   ├── directory
    │   │   └── file2.txt
    │   └── file1.txt
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    4 directories, 4 files
    [root@localhost test]# 
    
    
    • 同样的,可以通过 -a 来同步 SRC 的文件到 backups_r,属性和源文件一样。
    [root@localhost test]# 
    [root@localhost test]# ll SRC/
    total 0
    drwxr-xr-x. 2 root root 23 Aug 12 22:22 directory
    -rw-r--r--. 1 root root  0 Aug 12 22:20 file1.txt
    [root@localhost test]# 
    [root@localhost test]# ll backups_r/    ## 用 -r 参数传输过来的时间
    total 0
    drwxr-xr-x. 2 root root 23 Aug 13 00:11 directory
    -rw-r--r--. 1 root root  0 Aug 13 00:11 file1.txt
    
    ## -a 传输 SRC 所有文件到 backups_r 目录下
    [root@localhost test]# rsync -a SRC/* backups_r/    
    [root@localhost test]# 
    [root@localhost test]# ll backups_r/    ## 用 -a 参数传输 SRC源的时间
    total 0
    drwxr-xr-x. 2 root root 23 Aug 12 22:22 directory
    -rw-r--r--. 1 root root  0 Aug 12 22:20 file1.txt
    [root@localhost test]# 
    
    
    • --recursive 参数和 -r 一样。
    [root@localhost test]# rm -rf backups_r/*
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_r
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    3 directories, 2 files
    [root@localhost test]# 
    [root@localhost test]# rsync --recursive SRC backups_r/
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_r    ## --recursive 和 -r 一样,整个 SRC 目录传输到 backups_r
    │   └── SRC
    │       ├── directory
    │       │   └── file2.txt
    │       └── file1.txt
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    5 directories, 4 files
    [root@localhost test]# 
    [root@localhost test]# rm -rf backups_r/*
    [root@localhost test]# 
    [root@localhost test]# tree
    .
    ├── backups_r
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    3 directories, 2 files
    [root@localhost test]# rsync --recursive SRC/ backups_r/
    
     ## --recursive 和 -r 一样,SRC目录下的所有内容都传输到 backups_r
    [root@localhost test]# tree   
    .
    ├── backups_r
    │   ├── directory
    │   │   └── file2.txt
    │   └── file1.txt
    └── SRC
        ├── directory
        │   └── file2.txt
        └── file1.txt
    
    4 directories, 4 files
    [root@localhost test]# 
    
    
    • 综上所述,纯 rsync 只能传输文件,不能传输目录及目录内的内容。-r 可以传输目录内所有内容,如有子目录或文件会递归传输,时间跟随系统时间。-a 也可以实现 -r 的功能,时间同步于 源 的时间。

    相关文章

      网友评论

          本文标题:4-10.7 Linux 中的文件同步传输 --- rsync

          本文链接:https://www.haomeiwen.com/subject/tdahbltx.html