为什么 rsync 没有同步此文件?

为什么 rsync 没有同步此文件?

我有一个文件的两个版本,每个版本位于不同的目录中:

$ dir foo{_test,}/bar.js
-rw-r--r-- 1 ikegami pg9999999 53721 Jun  9 15:11 foo/bar.js
-rw-r--r-- 1 ikegami pg9999999 53721 Jun  9 21:12 foo_test/bar.js

$ diff -u foo{_test,}/bar.js
--- foo_test/bar.js   2020-06-09 21:12:29.903536400 -0700
+++ foo/bar.js        2020-06-09 15:11:09.170603100 -0700
@@ -1801 +1801 @@
-   const build = "?build=1591762349";  // !!! Modified during publish !!!
+   const build = "?build=1586651406";  // !!! Modified during publish !!!

我尝试使用 rsync 来同步目录:

$ rsync -vva foo{_test,} | grep bar.js
foo_test/bar.js is uptodate

没有改变。

$ dir foo{_test,}/bar.js
-rw-r--r-- 1 ikegami pg9999999 53721 Jun  9 15:11 foo/bar.js
-rw-r--r-- 1 ikegami pg9999999 53721 Jun  9 21:12 foo_test/bar.js

$ diff -u foo{_test,}/bar.js
--- foo_test/bar.js   2020-06-09 21:12:29.903536400 -0700
+++ foo/bar.js        2020-06-09 15:11:09.170603100 -0700
@@ -1801 +1801 @@
-   const build = "?build=1591762349";  // !!! Modified during publish !!!
+   const build = "?build=1586651406";  // !!! Modified during publish !!!

rsync(1)说

Rsync 使用“快速检查”算法(默认)查找需要传输的文件,该算法查找大小或上次修改时间已发生变化的文件。

我觉得文件应该更新,因为这些文件的最后修改时间不同。我遗漏了什么?

(一个单词被替换为foo,另一个单词被替换为bar。原始单词完全由小写 ASCII 字母组成。一个 7 位数字被替换为9999999。)

答案1

您的命令:

$ rsync -vva foo_test foo

foo_test将在文件夹内创建一个新文件夹foo。检查foo/foo_test文件夹是否存在!

这看起来可能不直观,但cp -a命令会做同样的事情。

为了避免这种情况,您可以使用:

$ rsync -vva foo_test/ foo

来自 rsync 手册页:

您可以将源文件中的尾随 / 视为“复制此目录的内容”,而不是“按名称复制目录”

相关内容