我有一个文件的两个版本,每个版本位于不同的目录中:
$ 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 手册页:
您可以将源文件中的尾随 / 视为“复制此目录的内容”,而不是“按名称复制目录”