文章目录
- 1、功能:
- 2、参数介绍:
- 3、示例:
- 1、本地同步:
- 2、远程同步 到 本地:
- 3、本地同步 到 远程:
- 4、快速批量替换更新文件,并替换其中的文件,但忽略某几个文件:
- 5、可以使用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='' 将从 文件中读取文件名模式列表,只同步符合指定模式的文件或目录到目标位置。
--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/