如何摆脱 rsync 的 .d..t (时间戳更改)输出?

如何摆脱 rsync 的 .d..t (时间戳更改)输出?

当我使用 rsync 应用程序比较两个目录时,我可以看到有很多关于时间戳更改的输出。例如:

$ rsync --dry-run -avh -i --delete --size-only --checksum --stats dir1/ dir2/

...
...
.d..t...... 3com/
.d..t...... RTL8192E/
.d..t...... acenic/
.d..t...... adaptec/
.d..t...... advansys/
.d..t...... amd/
.d..t...... amdgpu/
.d..t...... ar3k/
.d..t...... ar3k/1020201coex/
.d..t...... asihpi/
.d..t...... ath10k/

...
...

我只是想查看文件的 md5sum 不相同时的任何更改。我不想看到任何时间戳变化。我怎样才能避免这些d..t输出?

多谢。

编辑:

我以为--size-only会暗示--no-times,但事实并非如此。非常感谢@BowlOfRed 的回答。所以最终的工作命令是:

rsync --dry-run -avh --no-times -i --delete --checksum --stats dir1/ dir2/

答案1

您指定(通过-a标志)希望在所有文件/目录上保留时间戳,因此它报告将发生这些更改。

要么不给出-t标志(通过 via 传入-a),要么--no-times在命令行上添加该标志。

rsync现在将不会使用时间作为检查是否需要更新的标准,并且如果唯一的区别是时间戳,则不会尝试更新。

答案2

这些看起来像目录时间戳,您可以通过通过管道输出来忽略它们grep -v '/$'

如果你想绝对精确,请使用更完整的 RE,它仅匹配d..t目录的序列,然后仅忽略这些行

rsync … | grep -v '^\.d\.\.t\.\.\.\.\.\. .*/$'

答案3

作为已接受答案的替代方案,我将使用 -r --size-only 而不是 -a (扩展为 -rlptgoD)。

您正在避免时间戳差异,因此您将跳过其中的“t”(rlptgoD)。使用 -r 而不是 -a 假设您不需要其他(lpgoD)。

其中:l(小 L)是符号链接,p 是权限,g 是组,o 是所有者,D 相当于 --devices --specials

您的问题是需要避免时间戳差异,并且您给出的示例包括校验和,但我假设您不需要执行校验和(这需要更长的时间)。所以一个例子可以是:

rsync -rhinv --size-only --progress --delete --stats 

您的示例中有 -ahiv,所以我假设您知道它们的作用。 -n 是 --dry-run 的简写。

题外话:我以前从未使用过 --stats 。我刚刚尝试过,它在 rsync 输出中添加了大约十几行摘要。很高兴知道。如果我期望输出很长的列表,我个人会继续使用 --stats 。否则不会。

相关内容