rsync:如何排除最顶层的目录

Ste*_*roy 19 rsync

所以,我有一个看似简单的问题,但到目前为止我还没有找到解决方案:我想从 rsync 中排除最顶层的目录,同时仍然同步它的所有子目录。特别的问题是我无权修改最顶层目录的时间,但希望所有孩子都能正确同步时间。

我使用的 rsync 命令如下:

rsync --exclude ./ -rlptDu ./ server.example.com:/usr/local/directory/
Run Code Online (Sandbox Code Playgroud)

server.example.com:/usr/local/directory/看起来像这样:

drwxrws---  5 root   staff 24576 Jul  9 15:00 .
Run Code Online (Sandbox Code Playgroud)

(我的本地用户是 的成员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
Run Code Online (Sandbox Code Playgroud)

这是本地机器上的 3.0.9 版和远程机器上的 3.0.7 版,两台机器都运行 Debian。

Gil*_*il' 12

我认为rsync的过滤规则不能匹配顶级目录,所以它总是同步的。解决方法是同步此目录中的所有文件,而不是同步目录本身。

rsync -rlptDu -- * server.example.com:/usr/local/directory/
Run Code Online (Sandbox Code Playgroud)

如果最顶层目录中有点文件,并且文件名以两个点开头,则在.[!.]*后面添加。*..?*

  • 很好,谢谢!那个有效。这种技术的唯一缺点是它需要 shell 选择所有文件。如果目录中有大量文件(在我的情况下没有),它可能会窒息。这可能可以使用 xargs 修复(尽管不能使用 --delete 选项)。 (2认同)
  • 我使用“*”遇到的一个问题是“--delete”没有删除任何文件,因为它们不是搜索的一部分。 (2认同)