使用rsync的--files-from参数提示No such file or directory错误如何解决
问题原因
- 多余的转义逻辑错误:你添加的
sed 's/ /\ /g'步骤会给路径中的空格额外添加反斜杠转义,但rsync读取--files-from列表时按整行作为原始路径处理,不会解析行内转义符,最终传给系统的路径会多出不必要的反斜杠,导致找不到文件。 - find逻辑不严谨:未指定
-type d筛选目录,且或条件未用括号包裹,部分场景下会出现匹配结果不符合预期的问题;同时输出的绝对路径和你指定的根源目录/搭配时,macOS自带的老旧rsync 2.6.9版本存在兼容bug。 - 参数缺失:未添加归档参数
-a,无法和你之前使用的cp -a效果对齐,也可能导致目录读取权限异常。
解决方法
方案1(更稳定,无需组合find命令)
直接使用rsync自带的过滤规则实现需求,避开路径匹配坑:
rsync -a --include='*/' --include='*[Tt][Ee][Nn][Nn][Ii][Ss]*' --include='*[Ff][Oo][Oo][Tt][Bb][Aa][Ll]*' --exclude='*' /Volumes/GroupFolders/ ~/Desktop/new_folder/
如果后续你通过Homebrew升级到新版rsync,还可以用--ignore-case参数简化规则:
rsync -a --ignore-case --include='*/' --include='*tennis*' --include='*football*' --exclude='*' /Volumes/GroupFolders/ ~/Desktop/new_folder/
方案2(保留find+--files-from的写法)
修正路径逻辑和多余转义即可:
rsync -a --files-from=<(find /Volumes/GroupFolders -type d \( -iname '*tennis*' -o -iname '*football*' \)) /Volumes/GroupFolders/ ~/Desktop/new_folder/
修改点说明:
- 删除了多余的sed转义步骤
- 给find添加
-type d只匹配目录,用括号包裹或条件保证匹配逻辑正确 - 将rsync源根目录改为
/Volumes/GroupFolders/,和find的查找根目录对齐,避开老版本rsync的绝对路径兼容问题
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

