当我使用 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 。否则不会。