有时,我需要了解我正在编写的脚本的rsync
输出。在编写该脚本的过程中,我四处搜寻并发现@mit编写的内容above。我使用该信息以及其他来源的文档在位标志上创建了自己的入门手册,以及如何使rsync
为所有操作输出位标志(默认情况下不执行此操作)。
我将这些信息发布在这里,希望它可以帮助其他人(如我)通过搜索在此页面上迷失,并且需要对rsync
进行更好的说明。
结合--itemize-changes
标志和
我正在使用rsync
备份服务器文件,但我有两个问题:
在此过程的中间,我需要停止并再次启动rsync
。rsync
是从停止点开始还是从头开始?
在日志文件中,我看到"f+++++++++"
。这是什么意思?
例如:
2010/12/21 08:28:37 [4537] >f.st...... iddd/logs/website-production-access_log
2010/12/21 08:29:11 [4537] >f.st...... iddd/web/website/production/shared/log/production.log
2010/12/21 08:29:14 [4537] .d..t...... iddd/web/website/production/shared/sessions/
2010/12/21 08:29:14 [4537] >f+++++++++ iddd/web/website/production/shared/sessions/ruby_sess.017a771cc19b18cd
2010/12/21 08:29:14 [4537] >f+++++++++ iddd/web/website/production/shared/sessions/ruby_sess.01eade9d317ca79a
让我们看一下rsync的工作原理,并更好地理解神秘的结果行:
1-rsync的一个巨大优点是,在下一次中断之后,它会继续平稳运行。
如果下一次rsync调用在此期间未更改,则不会再次传输它已经传输的文件。但是它会从头开始再次检查所有文件以找出原因,因为它不知道它已被中断。
2-如果您阅读了-i, --itemize-changes
中man rsync
的部分,则每个字符都是可以翻译的代码>
从问题中解码示例日志文件:
> - the item is received
f - it is a regular file
s - the file size is different
t - the time stamp is different
. - the item is not being updated (though it might have attributes
that are being modified)
d - it is a directory
t - the time stamp is different
> - the item is received
f - a regular file
+++++++++ - this is a newly created item
rsync手册页的相关部分:
-i,--itemize-changes
请求对每个文件所做的更改的简单逐项列表,包括属性更改。这与指定--out-format ='%i%n%L'完全相同。如果您重复此选项,则仅当接收的rsync至少为2.6.7版本时,才会输出未更改的文件(您可以将-vv与rsync的较早版本一起使用,但这也会打开其他详细信息mes-鼠尾草)。
“%i”转义符的加密输出为11个字母长。通用格式类似于字符串YXcstpoguax,其中Y替换为完成的更新类型,X替换为文件类型,其他字母表示如果被修改则可以输出的属性。
替换Y的更新类型如下:
<
表示文件正在传输到远程主机(已发送)。>
表示文件正在传输到本地主机(已接收)。c
表示该项目正在发生本地更改/创建(例如目录的创建或符号链接的更改等。)>h
表示该项目是到另一个项目的硬链接(需要--hard-links。)>.
意味着该项目没有被更新(尽管它的属性可能正在被修改)。*
表示项目输出区域的其余部分包含一条消息(例如“正在删除”)。替换X的文件类型是:文件的f
,目录的d
,符号链接的L
,设备的D
和文件的S
。特殊文件(例如,命名的套接字和fifos)。
上面字符串中的其他字母是如果要更新项目的关联属性或“。”,则将输出的实际字母。没有改变。这是三个例外:(1)新创建的项目用“ +”替换每个字母,(2)相同的项目用空格替换点,以及(3)未知属性用“?”替换每个字母(与较旧的rsync通话时可能会发生这种情况。)>
与每个字母关联的属性如下:
c
意味着常规文件具有不同的校验和(需要--checksum),或者符号链接,设备或特殊文件的值已更改。请注意,如果您将文件发送到3.0.1之前的rsync,则此更改标志将仅用于校验和不同的常规文件。s
表示常规文件的大小不同,并且将通过文件传输进行更新。t
表示修改时间不同,并且正在更新为发送者的值(需要--times)。 T的替代值表示将修改时间设置为传输时间,这是在不使用--times更新文件/符号链接/设备并且更改符号链接且接收者无法设置其时间的情况下发生的。 (注意:使用rsync 3.0.0客户端时,对于此时间设置失败,您可能会看到s标志与t组合在一起,而不是正确的T标志。)p
表示权限不同,并且正在更新为发件人的值(需要--perms)。o
表示所有者不同,并且正在更新为发件人的值(需要--owner和超级用户特权。g
表示该组不同,并且正在更新为发件人的值(需要--group和设置该组的权限)。u
插槽保留供将来使用。a
表示ACL信息已更改。x
表示扩展属性信息已更改。另一个输出是可能的:删除文件时,“%i”将为每个被删除的项目输出字符串“ * deleting”(假设您正在与最近的rsync交谈,它记录删除而不是输出它们作为详细信息)。
有时,我需要了解我正在编写的脚本的rsync
输出。在编写该脚本的过程中,我四处搜寻并发现@mit编写的内容above。我使用该信息以及其他来源的文档在位标志上创建了自己的入门手册,以及如何使rsync
为所有操作输出位标志(默认情况下不执行此操作)。
我将这些信息发布在这里,希望它可以帮助其他人(如我)通过搜索在此页面上迷失,并且需要对rsync
进行更好的说明。
结合--itemize-changes
标志和
-vvv
标志,rsync
为我们提供了与目标目录相比在源目录中标识的所有文件系统更改的详细输出。然后可以对rsync
产生的位标志进行解码,以确定发生了什么变化。要解码每个位的含义,请使用下表。rsync
输出中每个位的位置和值的说明:
文件系统更改的条目。没有三重(YXcstpoguax path/to/file ||||||||||| ||||||||||╰- x: The extended attribute information changed |||||||||╰-- a: The ACL information changed ||||||||╰--- u: The u slot is reserved for future use |||||||╰---- g: Group is different ||||||╰----- o: Owner is different |||||╰------ p: Permission are different ||||╰------- t: Modification time is different |||╰-------- s: Size is different ||╰--------- c: Different checksum (for regular files), or || changed value (for symlinks, devices, and special files) |╰---------- the file type: | f: for a file, | d: for a directory, | L: for a symlink, | D: for a device, | S: for a special file (e.g. named sockets and fifos) ╰----------- the type of update being done:: <: file is being transferred to the remote host (sent) >: file is being transferred to the local host (received) c: local change/creation for the item, such as: - the creation of a directory - the changing of a symlink, - etc. h: the item is a hard link to another item (requires --hard-links). .: the item is not being updated (though it might have attributes that are being modified) *: means that the rest of the itemized-output area contains a message (e.g. "deleting")
在各种情况下,rsync的一些示例输出:
>f+++++++++ some/dir/new-file.txt .f....og..x some/dir/existing-file-with-changed-owner-and-group.txt .f........x some/dir/existing-file-with-changed-unnamed-attribute.txt >f...p....x some/dir/existing-file-with-changed-permissions.txt >f..t..g..x some/dir/existing-file-with-changed-time-and-group.txt >f.s......x some/dir/existing-file-with-changed-size.txt >f.st.....x some/dir/existing-file-with-changed-size-and-time-stamp.txt cd+++++++++ some/dir/new-directory/ .d....og... some/dir/existing-directory-with-changed-owner-and-group/ .d..t...... some/dir/existing-directory-with-different-time-stamp/
捕获
rsync
的输出(集中在位标志上:在我的实验中,都需要
--itemize-changes
标志和-vvv
标志来获取rsync
,以输出all
-vvv
)标志,我看不到列出的目录,链接和设备更改。值得尝试使用您的rsync版本,以确保它正在观察并注意到您所期望的一切。[此技术的一种方便使用是将--dry-run
标志添加到命令中,并将由rsync确定的更改列表收集到变量中(不进行任何更改),以便您可以对列表进行一些处理。类似以下内容将捕获输出到变量中:
file_system_changes=$(rsync --archive --acls --xattrs \ --checksum --dry-run \ --itemize-changes -vvv \ "/some/source-path/" \ "/some/destination-path/" \ | grep -E '^(\.|>|<|c|h|\*).......... .')
在上面的示例中,
rsync
的(stdout)输出重定向到grep
(通过stdin),因此我们只能隔离包含位标志的行。处理捕获的输出:
然后可以记录变量的内容以供以后使用,或者立即迭代感兴趣的项目。在研究
rsync
时,我在编写的脚本中使用了这种精确的策略。您可以查看脚本(https://github.com/jmmitchell/movestough),以获得对捕获的输出进行后期处理以隔离新文件,重复文件(名称相同,内容相同),文件冲突(名称相同,内容不同)以及更改的示例在子目录结构中。
1)沃丁,这不是完全正确的。如果使用--partial或-P标记(与--partial --progress相同)rsync恢复中断的传输。
2)确切地说,这是--itemize-changes标记的常见输出。
1。)它会“重新启动同步”,但不会传输大小和时间戳等相同的文件。它首先建立要传输的文件列表,在此阶段,它将看到已经传输了一些文件,并会跳过它们。您应该告诉rsync保存时间戳等。(例如,使用rsync -a ...
)
rsync传输文件时,它将调用类似于.filename.XYZABC
而不是filename
的文件。然后,当它完成该文件的传输后,它将对其重命名。因此,如果在传输大文件时杀死rsync,则必须使用--partial选项继续传输,而不是从头开始。
2。)我不知道那是什么。您可以粘贴一些示例吗?
编辑:根据http://ubuntuforums.org/showthread.php?t=1342171,这些代码在[c0]选项的rsync手册页的部分中定义。
如果我的回答是基于乔奥的,则是固定的部分>
有时,我需要了解我正在编写的脚本的rsync
输出。在编写该脚本的过程中,我四处搜寻并发现@mit编写的内容above。我使用该信息以及其他来源的文档在位标志上创建了自己的入门手册,以及如何使rsync
为所有操作输出位标志(默认情况下不执行此操作)。
我将这些信息发布在这里,希望它可以帮助其他人(如我)通过搜索在此页面上迷失,并且需要对rsync
进行更好的说明。
结合--itemize-changes
标志和
1)沃丁,这不是完全正确的。如果使用--partial或-P标记(与--partial --progress相同)rsync恢复中断的传输。
2)确切地说,这是--itemize-changes标记的常见输出。
1。)它会“重新启动同步”,但不会传输大小和时间戳等相同的文件。它首先建立要传输的文件列表,在此阶段,它将看到已经传输了一些文件,并会跳过它们。您应该告诉rsync保存时间戳等。(例如,使用rsync -a ...
)
rsync传输文件时,它将调用类似于.filename.XYZABC
而不是filename
的文件。然后,当它完成该文件的传输后,它将对其重命名。因此,如果在传输大文件时杀死rsync,则必须使用--partial选项继续传输,而不是从头开始。
2。)我不知道那是什么。您可以粘贴一些示例吗?