如何在Shell脚本中合并两个同名目录 Rsync不生效如何解决
Rsync编译问题修复与目录合并方案
一、编译Rsync报错解决
- 先清理之前的编译残留文件,避免旧配置干扰后续操作:
make clean && rm -f config.h config.log config.status
- 执行
./configure后务必检查最终输出的报错提示,不要直接执行make,多数编译失败都是因为configure阶段依赖不满足未被发现,比如依赖库版本低于当前rsync版本要求。 - 不建议自行编译替换系统默认rsync,Ubuntu官方源自带的rsync版本已经可以满足绝大多数目录合并需求,可先执行以下命令恢复系统默认版本,避免编译版本导致的环境混乱:
sudo apt install --reinstall rsync
- 若必须使用自定义编译的rsync,可查看编译目录下的
config.log文件,定位具体的依赖缺失或版本不兼容问题,针对性解决后再重新编译。
二、使用Rsync实现目录合并的正确方法
合并目录核心注意源路径末尾的斜杠不能省略,否则会把整个源目录复制到目标目录下,而非合并两个目录的内容。以下是不同场景的使用命令,默认需求为将/source目录的内容合并到/dest目录:
- 基础合并(源目录重名文件直接覆盖目标目录的对应文件,保留文件权限、软链接、属性等信息):
rsync -av /source/ /dest/
注意:/source/末尾的斜杠为必填项
- 保留目标目录重名文件,仅复制目标目录不存在的文件:
rsync -av --ignore-existing /source/ /dest/
- 对比文件修改时间,仅当源文件比目标文件更新时才覆盖:
rsync -avu /source/ /dest/
- 预演合并效果,不实际执行文件操作,确认效果符合预期后再去掉
--dry-run参数执行:
rsync -av --dry-run /source/ /dest/
- 小体量目录如果需要交互确认每个重名文件的处理逻辑,可直接使用mv命令:
mv -i /source/* /source/.* /dest/
内容的提问来源于stack exchange,提问作者user16194927
相关产品推荐
相关产品推荐

