Linux中_使用rsync_命令_快速批量_替换_同步_复制更新_文件夹_文件

1、功能:

Ubuntu中的rsync命令是一个强大的用于文件同步和备份的文件同步工具,可以通过网络或本地在本地或远程服务器之间同步文件和目录。它可以通过SSH或RSH协议进行安全的文件传输。

rsync 默认是增量复制,即只复制同步有修改的部分。大大提高了备份的速度和效率。如果要完全复制(替换更新),可以添加 --whole-file 参数,表示复制整个目录。

2、参数介绍:

-a:--archive:归档模式,相当于-rlptgoD,保留文件属性和权限等信息。递归同步目录。
-v:--verbose:显示详细信息。
-z:--compress:传输时进行压缩。压缩传输。
-h:人性化输出显示文件大小。(k、m、g)
-e, --rsh:指定远程shell程序,如ssh。
--delete:删除目标目录中在源目录中没有的文件。
--whole-file 表示完整复制整个文件。
-r, --recursive:递归到目录,同步整个目录包括其中的文件。

--include-from=filename:从指定的文件中读取文件名模式列表,只同步符合指定模式的文件或目录。
    --include-from='filelist.txt' 将从 filelist.txt 文件中读取文件名模式列表,只同步符合指定模式的文件或目录到目标位置。

--include=:包含指定的文件或目录。
    --include=*/ 表示只包括所有目录。
    --include=* 表示只包括所有文件。
    --include="*/" --include="*" 表示只包括所有目录和文件。(通配符的顺序很重要,必须先匹配目录再匹配文件)
    --include=folder1/ 表示包括名为 folder1 的目录
     
--exclude=:排除指定的文件或目录。支持通配符。
    --exclude='*/' 表示忽略排除所有目录。
    --exclude=* 表示忽略排除所有文件。
    --exclude="*/" --exclude="*" 表示忽略排除所有目录和文件。
    --exclude='file1' 表示忽略名为 file1 的文件。
    --exclude 'logs/' 表示忽略名为 logs 的目录。
    --exclude 'logs/*' 表示忽略名为 logs 的目录及其下的所有文件和子目录*/。
    --exclude '/data/logs/' 表示忽略名为 logs 的目录及其下的所有文件和子目录。(绝对路径)
    --exclude 'data/logs/' 表示忽略名为 logs 的目录及其下的所有文件和子目录。(x相对路径)
    
--include='pattern' --exclude='pattern':同步符合 --include 模式但不符合 --exclude 模式的文件或目录。

--include='pattern' --exclude='pattern' --include='pattern':同步符合第一个 --include 模式但不符合 --exclude 模式的文件或目录,并且符合第二个 --include 模式的文件或目录。

--include='pattern' --include='pattern' --exclude='*':同步符合第一个和第二个 --include 模式的文件或目录,并排除所有其他文件和目录。

    //--include='*.txt' --exclude='*.log' 同步源目录中的 .txt 文件,但不包括 .log 文件。
    
    //--include='*.txt' --exclude='*' --include='folder/' 同步源目录中的 .txt 文件和 folder 目录,但不包括其他文件和目录。
    
    //--include='*.txt' --include='folder/' --exclude='*'     将同步源目录中的 .txt 文件和 folder 目录,但不包括其他文件和目录。
    
    //--include=*/ --exclude=*  同步所有目录,但排除所有文件。
    //--include='*/' --exclude='*'  同步所有目录,但排除所有文件。
    //--include="*/" --exclude="*"  同步所有目录,但排除所有文件。
    
    //--include=*           (只包括所有目录和文件) 
    //--include=*/          (只包括所有目录和文件) 
    //--include=logs        (只包括所有目录和文件) 
    //--include=logs/       (只包括所有目录和文件)
    //--include=logs/*      (只包括所有目录和文件)
    //--include=/logs       (只包括所有目录和文件)
    //--include=/logs/      (只包括所有目录和文件)
    //--include=/logs/*     (只包括所有目录和文件)
    
    //--include='*'         (只包括所有目录和文件) 
    //--include='*/'        (只包括所有目录和文件) 
    //--include='logs'      (只包括所有目录和文件) 
    //--include='logs/'     (只包括所有目录和文件)
    //--include='logs/*'    (只包括所有目录和文件)
    //--include='/logs'     (只包括所有目录和文件)
    //--include='/logs/'    (只包括所有目录和文件)
    //--include='/logs/*'   (只包括所有目录和文件)
    
    //--exclude=*           (排除所有文件和目录) 
    //--exclude=*/          (排除所有文件和目录)
    //--exclude=logs        (排除所有文件和目录)
    //--exclude=logs/       (排除所有文件和目录)
    //--exclude=logs/*      (排除所有文件和目录)
    //--exclude=/logs       (排除所有文件和目录)
    //--exclude=/logs/      (排除所有文件和目录)
    //--exclude=/logs/*     (排除所有文件和目录)
    
    //--exclude='*'         (排除所有文件和目录)
    //--exclude='*/'        (排除所有文件和目录)
    //--exclude='logs'      (排除所有文件和目录)
    //--exclude='logs/'     (排除所有文件和目录)
    //--exclude='logs/*'    (排除所有文件和目录)
    //--exclude='/logs'     (排除所有文件和目录)
    //--exclude='/logs/'    (排除所有文件和目录)
    //--exclude='/logs/*'   (排除所有文件和目录)
    
    
    注意:
        绝对路径:需要在 --exclude 参数中指定完整的目录路径,并在路径前添加斜杠(/)来表示根目录。另外,如果需要排除的路径中包含空格或其他特殊字符,需要使用引号将其括起来。
    
        相对路径:在 --exclude 参数中指定相对路径时,不需要在路径前加斜杠(/),且路径中不应包含空格或其他特殊字符。同时,需要注意相对路径的正确性,避免出现排除不完全或排除错误的情况。
        
        请注意,末尾的斜线非常重要,它表示同步源目录中的内容而不是整个目录本身。
            */  所有目录
            *   所有文件和目录


        参数的值如果不使用引号括起来,rsync命令会将--include参数的值解释为一个模式,其中包含通配符.
        参数的值如果使用引号括起来,rsync命令会将--include参数的值解释为一个字符串.

3、示例:

1、本地同步:

    rsync -avz /source/path /destination/path

2、远程同步 到 本地:

    1、将远程服务器 user@ip地址 的 /source/path 目录同步到本地目录 /destination/path:
        rsync -avz -e ssh user@ip地址:/source/path /destination/path
    
    2、将远程服务器 192.168.1.100 的 /data 目录同步到本地目录 /data/backup:
    
        rsync -avz 192.168.1.100:/data/ /data/backup/
        
    3、将远程服务器 192.168.1.100 的 /data 目录同步到本地目录 /data/backup,并且只同步指定的文件和目录:
        
        rsync -avz --include 'logs/' --include 'data/' --exclude '*' 192.168.1.100:/data/ /data/backup/

3、本地同步 到 远程:

    1、将本地目录 /data/backup 同步到远程服务器 192.168.1.100 的 /data 目录下:
    
        rsync -avz /data/backup/ 192.168.1.100:/data/
    
    2、将本地目录 /data/backup 同步到远程服务器 192.168.1.100 的 /data 目录下,同时排除不需要同步的文件和目录:
    
        rsync -avz --exclude 'logs/' --exclude 'tmp/' /data/backup/ 192.168.1.100:/data/
    
3、删除目标目录中源目录没有的文件:
    
    rsync -avz --delete /source/path /destination/path

4、快速批量替换更新文件,并替换其中的文件,但忽略某几个文件:

    rsync -av --delete --exclude='file1' --exclude='file2' source/ destination/             
        解释:
        -a 表示复制时保留文件所有属性,包括权限、时间戳等。
        -v 表示输出详细信息。
        --delete 表示删除目标目录中不存在于源目录中的文件。
        --whole-file 表示复制整个文件。
        --exclude='file1' 表示忽略名为 file1 的文件。
        --exclude='file2' 表示忽略名为 file2 的文件。
        source/ 表示源目录。
        destination/ 表示目标目录。

    执行该命令后,会将目录 source 中的所有文件(包括子目录)复制到目录 destination 中,已经存在的文件会被更新,目标目录中不存在的文件会被新建,但忽略名为 file1 和 file2 的文件。目标目录中存在但源目录中不存在的文件会被删除。

    需要注意的是,rsync 默认是增量复制,即只复制有修改的文件。如果要完全复制(替换更新),可以添加 --whole-file 参数,表示复制整个文件。

    rsync -av --delete --exclude='file1' --exclude='file2' --whole-file source/ destination/

5、可以使用rsync命令来快速批量替换更新目录,而不替换其中的文件:

    rsync -av --exclude='*/' source/ destination/
        解释:
        -a 表示复制时保留目录所有属性,包括权限、时间戳等。
        -v 表示输出详细信息。
        --exclude='*/' 表示排除所有文件,只复制目录。
        source/ 表示源目录。
        destination/ 表示目标目录。
        
    执行该命令后,会将目录 source 中的所有目录(包括子目录)复制到目录 destination 中,已经存在的目录会被更新,目标目录中不存在的目录会被新建,但不会替换其中的文件。

    需要注意的是,rsync 默认是增量复制,即只复制有修改的目录。如果要完全复制(替换更新),可以添加 --whole-file 参数,表示复制整个目录。

    rsync -av --exclude='*/' --whole-file source/ destination/
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值