谁能告诉我这是做什么的?
rsync -uva --delete /srv/bkp01 /srv/offbk2/ > ~/offbkp01.log
它会删除bkp01
并将offbk2
日志发送到offbkp01.log
吗?
答案1
将其分成几个部分,主要有两个部分,后面是摘要和注释:
- 命令
rsync
:
rsync -uva --delete /srv/bkp01 /srv/offbk2/
- 运行 rsync 命令的 shell 完成的输出重定向:
rsync-command > ~/offbkp01.log
rsync
命令:
基本命令:
rsync
- 我认为这不需要解释(但如果被要求的话会提供)。
命令选项:
-uva
- 一组单个字符选项,包括(先显示短格式,再显示长格式):-u
--update
- 告诉 rsync 所有修改应仅应用于目标上与源上的文件年龄相同(大小不同)或更早的文件。也就是说,rsync 应仅传递源上的更改,这些更改将更新目标,但不应进行任何会导致目标文件成为旧版本的更改。有一些例外。类型差异(例如,一个是文件,另一个是目录)将导致更新,无论日期如何。符号链接和其他特殊文件会忽略此选项。而且,重要的是,这不会影响删除哪些文件。
-v
--verbose
- 增加 rsync 执行时打印的信息量。如果没有此选项,rsync 将(几乎?)不打印任何内容。使用此选项,rsync 将告诉您正在传输哪些文件,并在末尾添加摘要。更多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 的用户所在的组接收可以设置 side 是属于哪个组。否则,该组将只设置为前面提到的同一用户的默认组。-D
- 相当于选项--devices
和--specials
的组合。含义为:
--devices
- 字符和块设备文件被传输。如果接收rsync 不是以超级用户身份运行的(或假装以超级用户身份运行--fake-super
)。--specials
- 特殊文件(如套接字)被传输(否则不会被传输)。
--delete
- 告诉 rsync 删除目标上存在但不在源上的文件。这不受上面设置的更新选项的影响(事实上,这怎么可能呢,因为大多数文件系统不会保留所需的数据来查看哪个操作更新?)。此选项作用于源后通配符/全局扩展,因此 dir/* 与 dir/ 不同。一些重要说明:
- 这显然很危险。您可能应该先尝试使用该
--dry-run
选项,这将进行假装传输,以便确保不会发生意外更改。 - 如果有任何 I/O(输入/输出)错误 - 即,如果传输、读取或写入更改时出现任何问题 - 删除将从此时起被忽略。可以使用选项覆盖此
--ignore-errors
功能,但您可能不想这样做。 - 删除算法有多种变体,您可以在手册页中阅读更多内容。当接收方 rsync 的版本为 3.0.0 或更新版本(截至撰写本文时)时,
--delete-during
将使用该算法。如果接收方的版本较旧,则--delete-before
使用。如果在发生错误时文件保持某种一致性很重要(例如在完成所有其他更改之前不删除任何内容),则应使用比默认选项更具体的选项。
- 这显然很危险。您可能应该先尝试使用该
指挥地点:
/srv/bkp01
- 源文件或目录。目录末尾是否有斜杠,以及是否存在其他目录,这方面有一些详细的规则。您可以查看用法请参阅手册页的部分了解详细信息,但这里缺少尾部斜杠意味着目录将被复制到目标,而不是此目录的内容被复制到目标中。如果这是文件而不是目录,则情况相同。/srv/offbk2/
- 目标目录。一般来说,除非在命令的其他地方使用选项指定它,否则这始终是 rsync 命令部分中列出的最后一项。
Shell 的输出重定向:
Shell 命令:
>
- 这会将 stdout(标准输出)从左侧的任何内容重定向到右侧的文件,成为其内容,并且如果文件尚不存在,则创建该文件(如果可能)。一些注意事项:
- 你也可以将 stderr (标准错误输出)重定向到同一文件通过添加
2>&1
到上述命令的末尾。顺序很重要,因此请谨慎概括将其放在何处。魔数1
指的是 stdout,2
指的是 stderr,&
是(本质上)“地址”,完整的命令片段表示“将 stderr 的输出重定向到 stdout 流”。 - 如果要将内容附加到日志文件而不是替换它,则可以使用
>>
。将 stderr 重定向到同一位置的方法保持不变。 - 您可以使用 将 stdout 和 stderr 发送到不同的地方
1> stdout_file 2> stderr_file
。您还可以在该命令中使用>>
而不是 ,>
通过附加而不是替换来实现此目的。
- 你也可以将 stderr (标准错误输出)重定向到同一文件通过添加
Shell 变量/特殊符号:
~
- 这是当前用户主目录的简写,构成下一部分。
Shell 级位置:
~/offbkp01.log
- 当前用户主目录中的文件 offbkp01.log。这是 rsync 命令的输出存放的位置,因为使用了 重定向>
。
概括:
总之,此命令将:
- 复制全部常规文件、目录、符号链接、特殊文件和设备文件
- 也大多数(如果不是全部)重要的文件属性,
- 从
/srv/bkp01
, - 到
/srv/offbk2/bkp01
, 并且它将删除
/srv/offbk2/
不在的内容/srv/bkp01
,条件如下:- 如果A常规文件、目录或符号链接(?)有一个修改时间在
/srv/offbk2/
较新比其修改时间/srv/bkp01
,不会更新,如果两项仍然同类型(常规文件,目录,还是符号链接(?))。
- 如果A常规文件、目录或符号链接(?)有一个修改时间在
此外,rsync 将打印出关于它正在做什么的一些信息(具体来说,正在传输哪些文件,以及最终摘要),shell 将会写入 进入文件
~/offbkp01.log
如果该日志文件尚不存在,则会重新创建,如果该日志文件已存在,则会被覆盖。
注意:--fake-super
是用于使 rsync 模拟超级用户活动的选项。它通过使用文件的扩展属性来存储没有更高权限就无法设置的属性来实现这一点。每个属性的实际版本设置为根据可用选项和权限有意义的任何值。虽然这使得即使您没有超级用户权限也可以方便地进行一些备份,但也应注意,它可能比使用 rsync 带来更大的安全风险,因为即使备份了有关它们的信息,实际的安全属性也可能未正确设置。
来源:花了很多时间使用 rsync 并阅读其手册页。
答案2
来自手册:
- 删除
这告诉 rsync 从接收端删除无关文件(不在发送端的文件),但只删除正在同步的目录。您必须要求 rsync 发送整个目录(例如“dir”或“dir/”),而不使用通配符来表示目录的内容(例如“dir/*”),因为通配符由 shell 扩展,因此 rsync 会收到传输单个文件的请求,而不是文件的父目录。除非您使用 --delete-excluded 选项或将规则标记为仅在发送端匹配(请参阅 FILTER RULES 部分中的 include/exclude 修饰符),否则从传输中排除的文件也不会被删除。
因此,如果您没有使用通配符,它将从目标中删除不属于原始目录的文件。
源目录:
1.txt
2.txt
3.txt
目标目录:
4.txt
4.txt 将在 rsync 之后消失,而 1.txt、2.txt 和 3.txt 将保留在目标位置。
关于其他的事情:
uva
- 更新文件
- 详细:将结果回显到终端(即,将其重定向到您的日志文件,因此对最后一个问题的回答是肯定的)
- 存档:存档模式;等于 -rlptgoD(无 -H、-A、-X)
答案3
不,它只会从bkp01
目录中删除多余的文件。
还:
-u
,--update
- 跳过接收器上较新的文件-v
,--verbose
- 增加详细程度-a
,--archive
- 存档模式;等于 -rlptgoD(无 -H、-A、-X)
命令的输出使用以下方式rsync -uva --delete /srv/bkp01 /srv/offbk2/
发送到~/offbkp01.log
文件重定向运算符 ( >
)而不是打印到您的终端。如果文件不存在,则会创建它。如果文件存在,则会删除旧内容。
看man rsync
了解更多信息。
答案4
rsync
远程文件复制 - 跨本地磁盘、目录或网络同步文件树。
-u update
-v verbose
-a archive
--delete --> delete
这里它将删除里面的文件 关掉bk2。
然后结果的输出(成功或不成功)将被重定向到该日志文件。