使用rsync:如何排除所有包含cache单词(不区分大小写)的目录?
rsync 不区分大小写排除含“cache”的目录实现方法
方法一:使用rsync内置的大小写忽略过滤(推荐,适用于rsync 3.0.0及以上版本)
rsync 3.0.0及以后版本支持在过滤模式前添加i::前缀,启用不区分大小写的匹配。如果要排除所有名称包含“cache”(任意大小写组合)的目录,可执行以下命令:
rsync -av --exclude='i::*cache*/' 源目录/ 目标目录/
-av:归档模式(保留权限、时间等属性)+ 详细输出,是rsync常用的基础参数--exclude='i::*cache*/':i::开启大小写忽略,*cache*/匹配任意路径中名称包含cache的目录(末尾的/确保只排除目录,不会误排除同名文件)
如果需要同时排除含cache的文件和目录,去掉末尾的/即可:
rsync -av --exclude='i::*cache*' 源目录/ 目标目录/
方法二:兼容旧版本rsync的大小写枚举法
如果你的rsync版本低于3.0.0,不支持i::前缀,可以通过枚举每个字母的大小写来实现匹配:
rsync -av --exclude='*[cC][aA][cC][hH][eE]*/' 源目录/ 目标目录/
[cC]匹配小写c或大写C,同理[aA]、[hH]等,组合后可覆盖所有大小写变体的cache目录- 同样,末尾的
/限定只排除目录,去掉则同时排除文件
补充:批量模式文件(可选)
如果需要更灵活的规则,也可以将所有需要排除的模式写入一个文本文件,比如exclude_list.txt:
*Cache*/ *CACHE*/ *caChe*/ # 可添加其他大小写变体或额外排除规则
然后通过--exclude-from参数调用:
rsync -av --exclude-from='exclude_list.txt' 源目录/ 目标目录/
内容的提问来源于stack exchange,提问作者Danijel
相关产品推荐
相关产品推荐

