如何用rclone排除根目录下的dir1及所有subdir2目录?
需求与目录结构
目录结构:
├───dir1 │ ├───subdir1 │ ├───subdir2 │ └───subdir3 ├───dir1 2 │ ├───subdir1 │ ├───subdir2 │ └───subdir3 ├───dir2 │ ├───dir1 │ ├───dir12 │ ├───subdir2 │ └───subdir3 └───dir3 ├───dir1 └───dir13
每个目录及其子目录都包含file0、file1、file2三个文件。
需实现的过滤目标:
- 过滤根目录下的
dir1(但保留dir1 2) - 过滤所有位置的
subdir2目录及其内容
尝试过的命令与问题
执行命令:
rclone.exe ls --dump filters -vv --exclude "{/dir1/**,subdir2/**}" "src"
生成的过滤规则正则:
--- start filters --- --- File filter rules --- - (^|/)(/dir1/.*|subdir2/.*)$ --- Directory filter rules --- - (^|/)(/dir1/.*|subdir2/.*)$ --- end filters ---
结果:所有subdir2目录被成功排除,但根目录下的dir1及其内容未被过滤。
还尝试过以下模式,均无法实现需求:
{<full_path_to>/src/dir1/**,subdir2/**}{/dir1/,subdir2/**}
使用{dir1/,subdir2/**}会过滤所有位置的dir1(包括dir2/dir1、dir3/dir1),不符合要求。
解决方案
使用带锚定符^的过滤模式,精准匹配根目录下的dir1,同时全局排除subdir2:
rclone.exe ls --dump filters -vv --exclude "{^dir1/**,subdir2/**}" "src"
原理说明
^dir1/**:^锚定到远程路径的根目录,仅匹配根目录下的dir1及其所有子内容,不会影响其他目录下的dir1(如dir2/dir1、dir3/dir1)。subdir2/**:匹配任意位置的subdir2目录及其所有内容,实现全局排除。
执行该命令后,根目录下的dir1会被完全过滤,dir1 2及子目录中的dir1会被保留,所有subdir2目录也会被排除。
内容的提问来源于stack exchange,提问作者Mattia72
相关产品推荐
相关产品推荐

