rsync --files-from结合find输出使用异常问题咨询
解决rsync --files-from未正确排除目录的问题
你的问题核心出在find命令的-path参数写法错误,导致它根本没排除掉parent4和parent5目录,rsync自然会传输所有内容。咱们一步步拆解和修正:
1. 为什么你的find命令没生效?
你写的-not -path ' parent4 '有两个关键问题:
- 路径前后的空格是多余的,实际路径是
thisdir/parent4,这个模式根本匹配不到任何内容 -path需要匹配完整路径的模式,要排除parent4及其所有子目录,应该用通配符覆盖整个路径层级,比如*/parent4/*
2. 修正后的命令
把find命令改成这样,就能正确生成排除parent4和parent5的文件列表:
rsync -r -i --files-from=<(find thisdir/ -not -path '*/parent4/*' -not -path '*/parent5/*') ./ root@10.125.126.115:/root/
如果只想传输文件(不想传输空目录),可以给find加上-type f参数,同时去掉-r(因为只传输单个文件不需要递归):
rsync -i --files-from=<(find thisdir/ -type f -not -path '*/parent4/*' -not -path '*/parent5/*') ./ root@10.125.126.115:/root/
3. 额外排查技巧
如果rsync还是意外传输了某些内容,建议先单独运行find命令查看输出:
find thisdir/ -not -path '*/parent4/*' -not -path '*/parent5/*'
确认列表里确实没有parent4/parent5相关的路径——先确保生成的文件列表正确,再验证rsync的行为,这是排查这类问题的关键步骤。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

