使用rsync同步数据时,如何正确排除name.cfg.*格式的相关文件?
正确的rsync排除模式方案
要排除同步源根目录下以name.cfg.或.name.cfg.开头的文件,你需要使用限定源根目录的匹配模式,具体如下:
推荐命令(分两个排除规则)
rsync -av --exclude='^name.cfg.*' --exclude='^.name.cfg.*' /path/to/source/ /path/to/destination/
合并规则的简化写法
如果想减少参数数量,可以用字符集匹配可选的前置点:
rsync -av --exclude='^[.]?name.cfg.*' /path/to/source/ /path/to/destination/
关键说明
^符号:限定匹配同步源根目录下的文件,避免误排除子目录中同名结构的文件[.]?:匹配0个或1个前置点,同时覆盖name.cfg.xxx和.name.cfg.xxx两种格式*:匹配后续任意长度的随机ID字符
为什么你之前的模式无效
--exclude=.*name.cfg:该模式匹配以name.cfg结尾的文件,但你的目标文件是name.cfg.xxx格式(结尾是随机ID),完全不匹配--exclude=.*name.cfg.*:该模式会递归匹配所有包含name.cfg字符串的文件/目录,范围过广且未限定根目录,不符合你的需求--exclude=*.name.cfg.*:该模式要求文件名中间包含.name.cfg.,但你的目标文件要么是.name.cfg.xxx(无前置字符)要么是name.cfg.xxx(无中间的.name.cfg.),因此无法匹配
内容的提问来源于stack exchange,提问作者Leo Tran
相关产品推荐
相关产品推荐

