一尘不染

使用Rsync的包含和排除选项按模式包括目录和文件

linux

我在正确设置rsync语法时遇到问题,并且想知道我的场景是否可以实际使用rsync处理。首先,我已经确认rsync在本地主机和远程主机之间运行良好。在目录上进行直接同步成功。

我的文件系统如下所示:

uploads/
  1260000000/
    file_11_00.jpg
    file_11_01.jpg
    file_12_00.jpg
  1270000000/
    file_11_00.jpg
    file_11_01.jpg
    file_12_00.jpg
  1280000000/
    file_11_00.jpg
    file_11_01.jpg
    file_12_00.jpg

我想做的是仅在子目录中以“ file_11_”开头的文件上运行rsync,并且我希望能够仅运行一个rsync作业来同步子目录中的所有这些文件。

这是我正在尝试的命令:

rsync -nrv --include="**/file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

这导致0个文件在我的空运行中被标记为要传输。我已经尝试了–include和–
exclude语句的各种其他组合,但是要么没有获得任何结果,要么获得了所有内容,就好像没有设置任何include或exclude选项一样。

有人知道如何执行此操作吗?


阅读 322

收藏
2020-06-07

共1个答案

一尘不染

问题是--exclude="*"说要排除(例如)1260000000/目录,所以rsync永远不要检查该目录的内容,所以永远不会注意到目录包含您的--include

我认为最接近您想要的是:

rsync -nrv --include="*/" --include="file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

(将包括所有目录以及所有与匹配的文件file_11*.jpg,但不包括其他文件),或者 也许是 这样的:

rsync -nrv --include="/[0-9][0-9][0-9]0000000/" --include="file_11*.jpg" --exclude="*" /Storage/uploads/ /website/uploads/

(相同的概念,但将包含的目录更加挑剔)。

2020-06-07