从 rsync 日志文件中排除或输出未更新的文件

从 rsync 日志文件中排除或输出未更新的文件

对于rsync涉及大量潜在传输文件的文件,我的意思是拥有一个“干净”的日志,仅包含传输的内容。

我与 一起工作stdout,因为:

  1. 我不知道如何配置日志输出(如果可能的话)。
  2. 我也希望与它一起工作--dry-run(这迫使我与类似的东西一起工作, 自从)。
  3. 我的意思是编写至少对于传输 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 个“弱点”:

  1. 我不确定是否存在我遗漏的情况,这种方法可能会失败(通过“过多”报告或过滤文件)。
  2. 我想通过rsync自身来本地处理这个问题。更好的是,在日志文件中获取输出rsync(不仅仅是其输出),而不是使用暴力grep方法。请注意,使用--itemize-changesI 在标准输出中获取一些带有例如 status 的文件.f...p.....,这些文件应该被过滤(因为它们没有更新,第一个字符是一个点)。
  3. 使用grep我看不到部分进度。我不确定对于非常大的输出这是否会是一个主要问题。

有关的

  1. 如何使 rsync 记录已删除的文件
  2. 如何使rsync仅显示正在复制的文件,而不显示所有扫描的文件夹?
  3. 仅记录使用 rsync 传输的文件
  4. https://superuser.com/questions/1002074/linux-command-line-to-create-a-log-file-for-rsync
  5. https://serverfault.com/questions/401210/rsync-report-only-uploaded-files

笔记:这个问题的微妙之处(另见答案)使其与发布/链接的其他类似问题略有不同。这是否需要一个单独的问题是一个模糊的界限,而且是主观的。我个人认为保持现在的样子很有用。

答案1

我有 3 个要求:

  1. 配置日志输出。为此,--itemize-changes如我发布的链接以及@roaima 添加的其他链接所示,效果很好。
  2. 与 一起工作--dry-run。为此,--itemize-changes对于生成预期输出仍然有用,尽管仅在标准输出中,而不是在日志文件中。似乎别无选择。
  3. 使用操作系统的各种组合 (src/trg)。至少是 Linux-Linux 和 Linux-msys2(反之亦然)。对于 Msys2,由于是 NTFS,权限无法与 ext4 的权限相匹配。因此,已经rsync编辑的文件将继续显示,产生很长的列表。在这种情况下,--perms应将其删除。请注意,这也不会复制只读 <-> 读写权限更改;到目前为止,我还没有针对所有情况的完美解决方案。除此之外,--itemize-changes在这种情况下仍然有用。

相关内容