所以,我有一个看似简单的问题,但到目前为止我还没有找到解决方案:我想从 rsync 中排除最顶层的目录,同时仍然同步其所有子目录。特殊的问题是我无权修改最顶层目录的时间,但希望所有子目录都有正确同步的时间。
我使用的rsync命令如下:
rsync --exclude ./ -rlptDu ./ server.example.com:/usr/local/directory/
看起来server.example.com:/usr/local/directory/
像这样:
drwxrws--- 5 root staff 24576 Jul 9 15:00 .
(我的本地用户是 的成员staff
)
当我运行 rsync 时,出现以下错误:
rsync: failed to set times on "/usr/local/directory/.": Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1070) [sender=3.0.9]
make: *** [pub_to_mel_internal] Error 23
本地计算机上的版本为 3.0.9,远程计算机上的版本为 3.0.7,两台计算机都运行 Debian。
答案1
我认为rsync的过滤规则无法匹配顶级目录,所以它总是同步的。解决方法是同步此目录中的所有文件而不是目录本身。
rsync -rlptDu -- * server.example.com:/usr/local/directory/
如果最顶层目录中有点文件,并且文件名以两个点开头,则.[!.]*
在后面添加。*
..?*
答案2
看来 rsync 可以使用以下命令排除最顶层的目录--files-from
:
$ rsync -anv from/ to/
sending incremental file list
./
a
b.test
sent 97 bytes received 25 bytes 244.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
$ printf '%s\n' 'a' 'b.test' | rsync -anv --files-from=- from/ to/
building file list ... done
a
b.test
sent 88 bytes received 22 bytes 220.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
只是偶然发现它,在这里留下一条线索,以防它对某人(或将来的我)有帮助。