谁能告诉我这是做什么的?
rsync -uva --delete /srv/bkp01 /srv/offbk2/ > ~/offbkp01.log
Run Code Online (Sandbox Code Playgroud)
它会删除bkp01
并offbk2
发送日志offbkp01.log
吗?
Mat*_*rth 33
将其分解为部分,有两个主要部分,然后是摘要和注释:
rsync
命令:rsync -uva --delete /srv/bkp01 /srv/offbk2/
rsync-command > ~/offbkp01.log
rsync
命令:rsync
- 我认为这不需要解释(但会在需要时提供)。-uva
- 一组单字符选项,是(显示短然后长的形式):
-u
--update
- 告诉 rsync 所有修改应该只应用于目标上与源上的文件年龄相同(和不同大小)或旧的文件。也就是说,rsync 应该只传递来自将更新目标的源的更改,但不应进行任何会使目标文件成为旧版本的更改。
有一些例外。类型的差异(例如,一个是文件,另一个是目录)将导致无论日期如何更新。符号链接和其他特殊文件忽略此选项。而且,重要的是,这不会影响哪些文件被删除。
-v
--verbose
- 增加 rsync 在执行时打印的信息量。没有这个, rsync 将(几乎?)什么都不打印。使用此选项,rsync 将告诉您正在传输哪些文件,并在末尾添加摘要。More v
s 会增加打印的信息,尽管手册页说v
只有在调试时才应该使用两个以上的s。 -a
--archive
- 这相当于将其他几个选项 ( -rlptgD
) 打包在一起。顾名思义,它是设置许多用于归档文件和目录的常用选项的快捷方式。它会:-r
--recursive
- 告诉 rsync 递归复制目录。如果没有这个,或者更特殊的-d
--dirs
选项,rsync 将简单地跳过它遇到的任何目录(并在它的输出中告诉你它)。 -l
--links
- 当源是一个符号链接时,在目标上创建一个符号链接。根据其他选项,符号链接可能会被跳过或制作成一个完整的单独副本(即,具有内容(或文件的另一个副本)而不是符号链接的真实目录)。 -p
--perms
- 将目标文件的权限设置为与源文件相同。 -t
--times
- 将目标文件的修改时间设置为与源文件相同。由于保持这些时间同步可以使 rsync 算法更高效,因此您通常总是希望显式或隐式地使用它。 -g
--group
- 将目的地的组属性设置为与源相同。默认情况下按名称关联,但在某些情况下会回退到组 ID 号。如果接收rsync 不是以超级用户身份运行(或用 伪造它--fake-super
),则只能设置在接收端调用 rsync 的用户所属的组。否则,该组将仅设置为前面提到的同一用户的默认组。 -D
- 相当于选项--devices
和--specials
在一起。他们的意思是:--devices
- 传输字符和块设备文件。如果接收rsync 不是以超级用户身份运行(或使用 伪造它--fake-super
),则无效。 --specials
- 传输特殊文件(如套接字)(否则它们不会传输)。 --delete
- 告诉 rsync 删除目标上的文件,而不是源上的文件。这不受上面设置的更新选项的影响(实际上,这怎么可能因为大多数文件系统不会保留所需的数据来查看哪个操作更新?)。此选项作用于通配符/glob 扩展后的源,因此 dir/* 与 dir/ 不同。一些重要的注意事项:--dry-run
选项,这将进行假想传输,以确保不会发生意外更改。 --ignore-errors
选项覆盖,尽管您可能不想/不想这样做。--delete-during
将使用该算法。如果接收器较旧,则--delete-before
使用。如果发生错误时文件保持某种一致性很重要(例如在进行所有其他更改之前不删除任何内容),您应该使用比默认选项更具体的选项。/srv/bkp01
- 源文件或目录。如果目录末尾有/没有斜杠,以及另一个目录是否存在,则有一些详细的规则。您可以查看手册页的USAGE部分了解详细信息,但此处缺少尾部斜杠意味着此目录将被复制到目标中,而不是将此目录的内容复制到目标中。如果这是文件而不是目录,则相同。/srv/offbk2/
- 目标目录。通常,这将始终是 rsync 命令部分中列出的最后一项,除非在命令的其他地方使用选项指定它。>
- 这会将标准输出(标准输出)从左侧的任何内容重定向到右侧的文件,成为其内容,并在文件不存在时创建该文件(如果可能)。一些注意事项:2>&1
。顺序很重要,所以要小心概括把它放在哪里。幻数1
指的是 stdout,2
指的是 stderr,&
是(本质上)“地址”,完整的命令片段意味着“将 stderr 的输出重定向到 stdout 流中”。 >>
。将 stderr 重定向到同一位置的方法保持不变。 1> stdout_file 2> stderr_file
。您也可以在该命令中使用>>
而不是>
通过附加而不是替换来执行此操作。~
- 这是当前用户主目录的简写,并构成下一位的一部分。~/offbkp01.log
- 当前用户主目录中的文件 offbkp01.log。这是 rsync 命令的输出将被放置的地方,因为重定向>
。总之,此命令将:
/srv/bkp01
, /srv/offbk2/bkp01
, 它将删除/srv/offbk2/
不在 中的任何/srv/bkp01
内容,条件如下:
/srv/offbk2/
是较新的比它的修改时间/srv/bkp01
,它不会被更新,如果这两个项目仍在同一类型(普通文件,目录或符号链接(? ))。 此外,rsync 将打印出一些关于它正在做什么的信息(特别是,哪些文件正在传输,以及最终摘要),shell 会将这些信息写入 文件中 ~/offbkp01.log
。如果该日志文件尚不存在,则将重新创建该日志文件,如果它已存在,则将被覆盖。
注意:--fake-super
是一个用于使 rsync 模拟超级用户活动的选项。它通过使用文件的扩展属性来存储它在没有更高权限的情况下无法设置的属性来做到这一点。给定选项和可用权限,每个属性的真实版本被设置为任何有意义的版本。虽然这使得即使您没有超级用户权限也可以方便地进行一些备份,但还应注意,它可能会带来比一般使用 rsync 更大的安全风险,因为可能未设置真正的安全属性正确,即使有关他们的信息已备份。
来源:大量时间使用 rsync 并阅读其手册页。
从手册:
- 删除
这告诉 rsync 从接收端删除无关文件(不在发送端的文件),但仅用于正在同步的目录。您必须要求 rsync 发送整个目录(例如“dir”或“dir/”)而不使用目录内容的通配符(例如“dir/*”),因为通配符被 shell 展开,因此 rsync 会收到请求传输单个文件,而不是文件的父目录。从传输中排除的文件也不会被删除,除非您使用 --delete-excluded 选项或将规则标记为仅在发送方匹配(请参阅过滤规则部分中的包含/排除修饰符)。
因此,如果您不使用通配符,它将从目标中删除不属于原始目录的文件。
源码目录:
1.txt
2.txt
3.txt
Run Code Online (Sandbox Code Playgroud)
目标目录:
4.txt
Run Code Online (Sandbox Code Playgroud)
4.txt 将在 rsync 之后消失,1.txt、2.txt 和 3.txt 将在目的地。
关于其他事情:
uva
Run Code Online (Sandbox Code Playgroud)
不,它只会从bkp01
目录中删除无关的文件。
还:
-u
, --update
- 跳过接收器上较新的文件-v
, --verbose
- 增加详细程度-a
, --archive
- 存档模式;等于 -rlptgoD(无 -H、-A、-X)命令的输出使用重定向运算符 ( )rsync -uva --delete /srv/bkp01 /srv/offbk2/
发送到~/offbkp01.log
文件,而不是在终端中打印。如果该文件不存在,则会创建该文件。如果该文件存在,旧的内容将被删除。>
请参阅man rsync
获取更多信息。
rsync
Run Code Online (Sandbox Code Playgroud)
远程文件复制 - 跨本地磁盘、目录或网络同步文件树。
-u update
-v verbose
-a archive
--delete --> delete
Run Code Online (Sandbox Code Playgroud)
这里它将删除 offbk2内的文件。
然后结果的输出(成功与否)将被重定向到该日志文件。