对于rsync
涉及大量潜在传输文件的文件,我的意思是拥有一个“干净”的日志,仅包含传输的内容。
我与 一起工作stdout
,因为:
- 我不知道如何配置日志输出(如果可能的话)。
- 我也希望与它一起工作
--dry-run
(这迫使我与类似的东西一起工作这, 自从)。 - 我的意思是编写至少对于传输 Linux-Linux 和 Linux-msys2(反之亦然)有用的脚本。这里,权限 (
-p
)、所有者 (-o
) 和组 (-g
) 的选项可能会使事情变得复杂。
我组合了命令
rsync --recursive --perms --group --owner --times --one-file-system --sparse --stats --progress --update --out-format='%t %p %i %n %M %l' --delete --dry-run --include="*" --exclude="*" --log-file=rsync.log ./ ../trg
和
... | grep -E -v ' \.[fdLDS][\.c][\.s][\.t][\.p][\.o][\.g][\.u][\.a][\.x]'
按照描述这里。第一个点与任何未更新的项目匹配。第二个字符匹配任何项目类型。其余字符与属性上的任何条件匹配(更改/不更改)标志-v
恢复匹配。这可能与正在更新的任何项目匹配,仅此而已。未更新但时间戳已更改的项目将不会匹配。
我最终将其与 结合起来tee
,如
rsync --recursive --perms --group --owner --times --one-file-system --sparse --stats --progress --update --out-format='%t %p %i %n %M %l' --delete --dry-run --include="*" --exclude="*" --log-file=rsync.log ./ ../trg | grep -E -v ' \.[fdLDS][\.c][\.s][\.t][\.p][\.o][\.g][\.u][\.a][\.x]' | tee rsync.2.log
它生成rsync
日志文件rsync.log
和我的“自定义”日志文件rsync.2.log
。
即使它看起来有效,我的方法也有以下 3 个“弱点”:
- 我不确定是否存在我遗漏的情况,这种方法可能会失败(通过“过多”报告或过滤文件)。
- 我想通过
rsync
自身来本地处理这个问题。更好的是,在日志文件中获取输出rsync
(不仅仅是其输出),而不是使用暴力grep
方法。请注意,使用--itemize-changes
I 在标准输出中获取一些带有例如 status 的文件.f...p.....
,这些文件应该被过滤(因为它们没有更新,第一个字符是一个点)。 - 使用
grep
我看不到部分进度。我不确定对于非常大的输出这是否会是一个主要问题。
有关的:
- 如何使 rsync 记录已删除的文件
- 如何使rsync仅显示正在复制的文件,而不显示所有扫描的文件夹?
- 仅记录使用 rsync 传输的文件
- https://superuser.com/questions/1002074/linux-command-line-to-create-a-log-file-for-rsync
- https://serverfault.com/questions/401210/rsync-report-only-uploaded-files
笔记:这个问题的微妙之处(另见答案)使其与发布/链接的其他类似问题略有不同。这是否需要一个单独的问题是一个模糊的界限,而且是主观的。我个人认为保持现在的样子很有用。
答案1
我有 3 个要求:
- 配置日志输出。为此,
--itemize-changes
如我发布的链接以及@roaima 添加的其他链接所示,效果很好。 - 与 一起工作
--dry-run
。为此,--itemize-changes
对于生成预期输出仍然有用,尽管仅在标准输出中,而不是在日志文件中。似乎别无选择。 - 使用操作系统的各种组合 (src/trg)。至少是 Linux-Linux 和 Linux-msys2(反之亦然)。对于 Msys2,由于是 NTFS,权限无法与 ext4 的权限相匹配。因此,已经
rsync
编辑的文件将继续显示,产生很长的列表。在这种情况下,--perms
应将其删除。请注意,这也不会复制只读 <-> 读写权限更改;到目前为止,我还没有针对所有情况的完美解决方案。除此之外,--itemize-changes
在这种情况下仍然有用。