rsync:如何排除最顶层目录

rsync:如何排除最顶层目录

所以,我有一个看似简单的问题,但到目前为止我还没有找到解决方案:我想从 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)

只是偶然发现它,在这里留下一条线索,以防它对某人(或将来的我)有帮助。

相关内容