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


14

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

这是运行Debian的本地计算机上的版本3.0.9,远程计算机上的版本是3.0.7。


您是否熟悉此示例中的语法:wirespeed.xs4all.nl/mediawiki/index.php/…它允许您从其他排除的目录中包含特定的文件/目录。但是,您可能需要使用排除文件。
jippie 2012年

是的 问题是,我似乎无法说服它排除顶层目录(具体而言)。过去,我没有混用包含/排除的问题,似乎顶级是一种特殊情况。
史蒂夫·波默罗伊

Answers:


8

我认为rsync的过滤器规则无法匹配顶级目录,因此它始终处于同步状态。一种解决方法是同步此目录中的所有文件,而不是目录本身。

rsync -rlptDu -- * server.example.com:/usr/local/directory/

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


2
很好,谢谢!这样可行。该技术的唯一缺点是,它要求外壳程序选择所有文件。如果目录中有大量文件(对于我来说不是),它可能会阻塞。可以使用xargs来解决(尽管不能使用--delete选项)。
史蒂夫·波默罗伊

我使用的一个问题*--delete没有删除任何文件,因为它们不是搜索的一部分。
thomasa88

@ thomasa88请参阅 此答案
卡米尔Maciorowski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.